Как сделать разницу в днях без учёта таймзон в DayJs
у меня дата дата приходит в формате "2023-11-29T02:00:00+03:00"
Мне необходимо получить разницу в днях от текущей даты, без учёта времени, таймзон.
допустим, сегодня 28 ноября и у меня лондонская таймзона. Но разница между завтрашним и сегодня - всегда 0 дней.
const date1 = dayjs("2023-11-29T02:00:00+03:00");
const date2 = dayjs(dayjs()); // смотрю, например, 28 ноября в лондонской таймзоне
console.log(date1.diff(date2, 'd')); // получим 0
Я пробовал делать .startOf('D') для всех дат - не помогло. Я пробовал делать .tz('Europe/Moscow') - не помогло.
Почему все время 0 и как получить 1 день разницы дат? Все даты в объекте в итоге становятся $d: Tue Nov 28 2023 00:00:00 GMT+0000 (Среднее время по Гринвичу)
Ответы (1 шт):
метод diff у date.js считает через миллисекунды, а потом делит на 60/60/24 и округляет в меньшую сторону с погрешностью (читай неправильно), т.е. возвращает количество полных суток, а не дней. Можно использовать такой костыль:
const date1 = dayjs("2023-11-29T02:00:00+03:00").hour(0).minute(0).second(0).millisecond(1);
const date2 = dayjs().hour(0).minute(0).second(0).millisecond(1);
console.log(date1.diff(date2, "day", true)); //последнее true будет возвращать неокругленное значение, по нему видно, откуда проблема.
Вы можете обрезать время с поясом, типа strDate.split("T")[0] тогда обе даты будут в поясе браузера, но все равно, значение будет 0,9999999... если не обнулить даты до миллисекунд как в примере выше.