Момент-часовой пояс разбирает данный часовой пояс
У меня проблема при разборе объекта Date с использованием момента времени
Эта проблема
Я создаю приложение nodejs, которое должно проверять новый объект Date() с произвольным временем из базы данных (и действовать соответственно). Время и часовой пояс сохраняются в базе данных.
В примере
time | timezone
11:00| US/Eastern
Когда приходит вызов REST, я должен взять новый объект Date() и преобразовать его в заданный часовой пояс и посмотреть, не является ли текущее время более поздним, чем 9 утра. Но часовой пояс серверов и постоянный часовой пояс не совпадают.
Проблема
Я создаю сегодняшнюю строку даты, как это
function getTodaysDate() {
var today = new Date(),
dd = today.getDate(),
mm = today.getMonth()+1,
yyyy = today.getFullYear();
if(dd<10) {
dd='0'+dd
}
if(mm<10) {
mm='0'+mm
}
return yyyy +'-' + mm + '-' + dd;
}
И пытается создать объект Timestamp с моментом времени
startTime = moment.tz(new Date(getTodaysDate() + ' ' + '11:00'), 'US/Eastern');
Но структура правильно берет дату и преобразует ее в американский / восточный часовой пояс.
Поэтому, когда я печатаю startTime.format();
я получил
2016-08-01T07:00:00-04:00
И я хотел бы
2016-08-01T11:00:00-04:00
Так есть ли способ использовать пакет момент-часовой пояс, чтобы установить дату и время и просто рассматривать их как заданный часовой пояс?
2 ответа
Так что проблема была в том, что
startTime = moment.tz('here the date goes', 'US/Eastern');
Ожидал ли формат ISO или форматировал вручную (синтаксис этого мне не был известен), или объект Date(). Я впервые попробовал с этим
2016-08-01 11:00
Библиотека моментов пожаловалась (я выложу полное сообщение об ошибке, когда приеду в офис).
Решение
Добавить Т.
startTime = moment.tz('2016-08-01T11:00', 'US/Eastern');
Я ненавижу библиотеки времени и то, как мы отслеживаем время.
Вам не нужно ничего из Date
манипулирование объектами. Теоретически, вы должны просто сделать:
var zone = 'US/Eastern'
var time = '11:00'
var result = moment.tz(time, 'HH:mm', zone).format();
Однако есть известная ошибка, которая использует текущую дату UTC вместо текущей даты часового пояса. Пока это не исправлено, вы должны сделать это вместо этого:
var zone = 'US/Eastern'
var time = '11:00'
var s = moment.tz(zone).format('YYYY-MM-DD') + ' ' + time;
var m = moment.tz(s, zone);
var result = m.format();
(это предполагает ваш вклад time
значение в HH:mm
формат)