Я использую Moment.js для обработки некоторой маркировки даты на внешнем интерфейсе. Я столкнулся с неясным сценарием и хотел бы, чтобы эксперты MomentJS исправили меня, пожалуйста.
Рассмотрим следующую реализацию с переданным строковым значением, "2018-08-28T20:21:56"
Обратите внимание, что вышеупомянутая строка даты и добавленная минута 600
предоставляются динамически из серверной части.
let dateTitle;
// Before setting date label, compare enddate with endoffset against 12pm
let endCutOff = moment("2018-08-28T20:21:56").add(600, 'm');
let isBeforeNoon = moment(endCutOff).isBefore(moment({ hour: 12, minute: 0 }));
if ( isBeforeNoon ) {
// Credit previous day if user ended before noon.
dateTitle = moment("2018-08-28T20:21:56")
.add(600, 'm')
.local()
.subtract(1, 'd')
.format('MMMM D, YYYY');
} else {
// Credit that very day if after 12pm.
dateTitle = moment("2018-08-28T20:21:56")
.add(600, 'm')
.local()
.format('MMMM D, YYYY');
}
Правильно выводится как "28 августа 2018 года"
Однако, повторите ту же операцию с переданным строковым значением, "2018-08-29T20:43:58"
, и вы увидите, что это выдает "30 августа 2018" .
Это должно быть "29 августа 2018 года" .
Я признаю очевидное в том, что isBeforeNoon
верно в первом раунде и ложно в следующем. Но объяснение того, почему и как это исправить, - это то место, где мне нужен ваш опыт. Я подозреваю, что это связано с передаваемым форматом строки даты, но пока это просто понятие.
Спасибо за вашу помощь.