Moment JS isBetween не работает должным образом с объектами даты

У меня есть объект 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.

Есть идеи, что я делаю неправильно?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для большей точности я бы конвертировал их в эпоху 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

}

Или что-то вроде того.

Почему вы думаете, что это будет точнее? Как вы думаете, что делает moment.js внутри?

Barmar 31.05.2024 22:23

Можете ли вы показать, как динамически установить D1 и D2 на завтрашнюю дату, а не жестко запрограммировать ее?

Barmar 31.05.2024 22:25

С числами всегда легче играть, и они имеют больше визуального смысла.

passThru 31.05.2024 22:28

С абстракциями высокого уровня также легко работать.

Barmar 31.05.2024 22:28

Это относительно… если вы помните, что они на самом деле делают.

passThru 31.05.2024 22:34

Плюс он удаляет большую, больше не рекомендуемую библиотеку!

Evert 31.05.2024 23:44
Ответ принят как подходящий

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

Ах, гениально! Я бы никогда не догадался об этом сам. 😅 Спасибо!

Clifton Labrum 31.05.2024 22:56

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