Выполнение {время между полуночью и 1 часом ночи} .isBefore {время позже того дня} происходит ЛОЖЬ (кажется) - используя момент-часовой пояс - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь повторить ошибку. По сути, у меня есть код ниже в приложении. Это работает здесь, то есть «полночь до 7 утра» это правда.

// The server is running in UTC

const moment = require("moment-timezone");
moment.tz.setDefault("Europe/London");

const now = moment("2020-04-20 00:00"); // In the app, 'now' is the current moment()

const testTime = "07:00", testTimeMoment = moment(testTime, "HH:mm");

console.log(`now: ${now}\nUTC: ${now.utc()}\ntestTime: ${testTimeMoment}`);
console.log(`'now' is before 'testTime' ? ${now.isBefore(testTimeMoment)}`);

Файл console.log:

сейчас: пн 20 апреля 2020 00:00:00 GMT + 0100

UT C: вс 19 апреля 2020 23:00:00 GMT + 0000

testTime: понедельник, 20 апреля 2020 07:00:00 GMT + 0100

«сейчас» предшествует «testTime»? true

Но в моем приложении этот тест кажется неудачным, пока вы не доберетесь до 1 часа ночи и позже, а затем сравнение станет верным.

Мой сервер в Великобритании работает по UTC / GMT. Но у нас летнее время, поэтому я по умолчанию перехожу на лондонское.

Есть идеи?

ОБНОВЛЕНИЕ: Оператор сравнения действительно работает правильно. Он не дает ожидаемого результата, потому что между полуночью и 1 часом утра момент testTime создается как 7 утра днем ​​раньше . Сейчас 7 утра, Брити sh Летнее время, как я хочу, из-за установки часового пояса по умолчанию в верхней части кода, , но накануне . После часа ночи момент правильно создан как 7 утра сегодня.

...