Момент-часовой пояс разбирает данный часовой пояс

У меня проблема при разборе объекта 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 формат)

Другие вопросы по тегам