Moment.js - не могу правильно рассчитать разницу между датами, если они в разные дни

Может кто-нибудь объяснить мне, почему это не работает должным образом. Ниже приведен код, который использует moment.js для вычисления разницы между текущим и моим переменным временем.

           //breakfast
           var breakfasttimeleft = moment(person.breakfast, 'HH:mm');
           console.log("Person breakfast is at:  " + person.breakfast + " -- Current time is at: " + currenttime);
           console.log(breakfasttimeleft.diff(now, 'minutes'));

           //lunch
           var lunchtimeleft = moment(person.lunch, 'HH:mm');
           console.log("Person lunch is at:  " + person.lunch + " -- Current time is at: " + currenttime);
           console.log(lunchtimeleft.diff(now, 'minutes'));

           //dinner
           var dinnertimeleft = moment(person.dinner, 'HH:mm');
           console.log("Person dinner is at:  " + person.dinner + " -- Current time is at: " +  currenttime);
           console.log(dinnertimeleft.diff(now, "minutes"));
        })

ЗДЕСЬ ВЫХОД:

CONSOLE LOG
Person breakfast is at:  18:35 -- Current time is at: 18:35
0
Person lunch is at:  23:35 -- Current time is at: 18:35
300
Person dinner is at:  04:35 -- Current time is at: 18:35
-840

Ужин полностью испорчен в некоторых местах, например, наверху, а в других он работает отлично. В основном... он не знает, как искать часы, если другая дата в другой день, поэтому вместо этого он будет искать разницу между этими 2 часами в текущем дне.

С 18:35 до 04:35 Предполагается, что это будет с 18:35 до 04:35 утра, что составляет около 10 часов. Вместо этого он вычисляет время с 04:35 утра до 18:35 позже в тот же день. Как я могу исправить это для правильной работы?

Похоже, я должен указать день, а также.. как я могу отформатировать его так, чтобы это был день + часы + минуты

1 ответ

Решение

Ну, вы просто указываете время, но оно также должно хранить некоторую дату. Если вы не предоставите дату, она просто инициализируется до текущей даты, что и происходит в вашем случае.

Также просто нет возможности узнать дату, которую вы хотите установить. Вы должны будете установить дату самостоятельно.

Проще всего было бы просто добавить день к дате, которую вы создали: dinnertimeleft.add(1, 'd')

Если вы также хотите указать дату (в идеале полную), вы можете использовать эту строку формата: YYYY-MM-DD HH:mmИли создайте свой собственный, следуя этой документации.

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