У меня есть объект Date, и я хочу проверить, завтра ли он.
const dateToCheck: Date //Sat Jun 01 2024 09:00:00 GMT-0700
Я рассчитал завтра так:
const tomorrow = moment().add(1, 'day')
Начало и конец завтрашнего дня находятся так:
tomorrow.startOf('day') //Sat Jun 01 2024 00:00:00 GMT-0700
tomorrow.endOf('day') //Sat Jun 01 2024 23:59:59 GMT-0700
Когда я пытаюсь определить, завтра ли дата, которую я проверяю, получается false:
var isTomorrow = moment(dateToCheck).isBetween(
tomorrow.startOf('day'),
tomorrow.endOf('day'),
)
console.info(isTomorrow) //false
Насколько я могу судить, isTomorrow должно быть true, потому что Sat Jun 01 2024 09:00:00 находится между Sat Jun 01 2024 00:00:00 и Sat Jun 01 2024 23:59:59.
Есть идеи, что я делаю неправильно?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Для большей точности я бы конвертировал их в эпоху ECMAScript, а затем рассматривал как целые числа...
var D1='Sat Jun 01 2024 23:59:59';
var D2='Sat Jun 01 2024 00:00:00';
D1=new Date(D1).getTime()/1000;
D2=new Date(D2).getTime()/1000;
if (D1-D2 < 86400){
// same day
} else {
// next day
}
Или что-то вроде того.
Можете ли вы показать, как динамически установить D1 и D2 на завтрашнюю дату, а не жестко запрограммировать ее?
С числами всегда легче играть, и они имеют больше визуального смысла.
С абстракциями высокого уровня также легко работать.
Это относительно… если вы помните, что они на самом деле делают.
Плюс он удаляет большую, больше не рекомендуемую библиотеку!
Ваш ответ можно улучшить, добавив дополнительную вспомогательную информацию. Пожалуйста, отредактируйте , добавив дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
startOf и endOf модифицируют исходный объект Moment. Когда вы вызываете isBetween(tomorrow.startOf('day'), tomorrow.endOf('day')), функция isBetween получает один и тот же объект для дат начала и окончания.
Вам необходимо сделать копии объекта tomorrow при вызове функции:
const isTomorrow = moment(dateToCheck).isBetween(
moment(tomorrow).startOf('day'),
moment(tomorrow).endOf('day')
)
console.info(isTomorrow) // true
Ах, гениально! Я бы никогда не догадался об этом сам. 😅 Спасибо!
Почему вы думаете, что это будет точнее? Как вы думаете, что делает moment.js внутри?