Я пишу заявку на аренду оборудования, где клиентам взимается плата за аренду оборудования в зависимости от продолжительности (в днях) аренды. Итак, в основном, (ежедневная плата * количество дней) = общая плата.
Для мгновенной обратной связи на стороне клиента я пытаюсь использовать Javascript для определения разницы в двух календарных датах. Я искал вокруг, но ничего, что я нашел, совсем не то, что я ищу. Большинство решений, которые я видел, имеют форму:
function dateDiff1(startDate, endDate) {
return ((endDate.getTime() - startDate.getTime()) / 1000*60*60*24);
}
Моя проблема заключается в том, что оборудование может быть проверено и возвращено в в любое время суток в течение этих двух дат без дополнительной оплаты. Вышеприведенный код вычисляет количество 24-часовых периодов между двумя датами, когда меня действительно интересует количество календарных дней.
Например, если кто-то проверил оборудование в 6 утра 6 июля и вернул его в 10 вечера 7 июля, то приведенный выше код рассчитал бы, что прошло более одного 24-часового периода, и вернется 2. Желаемый результат: 1, поскольку прошло только одна календарная дата (т.е. с 6-го по 7-й).
Самое близкое решение, которое я нашел, это эта функция:
function dateDiff2(startDate, endDate) {
return endDate.getDate() - startDate.getDate();
}
который делает именно то, что я хочу, пока две даты находятся в пределах того же месяца. Однако, поскольку getDate() возвращает день месяца (т.е. 1-31), он не работает, если даты охватывают несколько месяцев (например, с 31 июля по 1 августа - 1 день, но приведенные выше расчеты 1 - 31, или -29).
На бэкэнде, в PHP, я использую gregoriantojd(), который, кажется, работает очень хорошо (см. этот пост для примера). Я просто не могу найти эквивалентное решение в Javascript.
У кого-нибудь есть идеи?