Это проблема часового пояса. Ваш oneDayBefore
использует местный часовой пояс по умолчанию:
var oneDayBefore = moment(utcDateTime, "M/D/YYYY h:mm:ss A").subtract(1, 'days');
тогда как момент, когда вы сравниваете его, использует UTC:
moment().utc().isSameOrAfter(oneDayBefore, 'day')
// ^^^^^^
Проблема станет яснее, если вы проверите .format()
каждого из них. Например, в моем часовом поясе (CST) я вижу:
В моем часовом поясе полночь UTC в 19:00 по местному времени. Итак, 19:30 по местному времени фактически соответствует 00:30 на следующий день по UTC.
Таким образом, когда вы звоните
moment().utc().isSameOrAfter
, который сравнивает текущее время / день в формате UTC с любым временем, которое ваше "8/28 7:30:00 PM"
минус один день соответствует по местному времени . Но, 27 августа 19:30 по местному времени может быть 8:28 по времени UTC - следовательно, вы сравниваете moment().utc()
(на момент написания, 27 августа, 23:45) с 28 августа, 00:30 ( или что-то подобное - это зависит от вашего часового пояса).
Вероятно, лучше использовать как можно больше внутреннего времени UTC и форматировать его только тогда, когда оно должно отображаться пользователю. То есть вместо звонка
moment(utcDateTime...
вызов
moment.UTC(utcDateTime...
и результаты будут такими, как ожидалось: