【发布时间】:2010-11-05 10:09:52
【问题描述】:
我正在编写一个设备租赁应用程序,其中根据租赁的持续时间(以天为单位)向客户收取租赁设备的费用。所以,基本上,(每日费用 * 天数)= 总费用。
对于客户端的即时反馈,我正在尝试使用 Javascript 来找出两个日历日期的差异。我四处寻找,但我发现的东西都不是我想要的。我见过的大多数解决方案都是以下形式:
function dateDiff1(startDate, endDate) {
return ((endDate.getTime() - startDate.getTime()) / 1000*60*60*24);
}
我的问题是,在这两个日期内,可以在一天中的任何时间签出和退回设备,而无需支付额外费用。上面的代码是计算两个日期之间的 24 小时周期数,而我对日历天数很感兴趣。
例如,如果有人在 7 月 6 日早上 6 点签出设备,并在 7 月 7 日晚上 10 点返回设备,上面的代码将计算超过一个 24 小时的时间段,并返回 2。期望的结果是 1 ,因为只过了一个日历日期(即 6 日到 7 日)。
我找到的最接近的解决方案是这个函数:
function dateDiff2(startDate, endDate) {
return endDate.getDate() - startDate.getDate();
}
这正是我想要的,只要两个日期在同一个月内。但是,由于 getDate() 只返回月份中的某天(即 1-31),因此当日期跨越多个月份时(例如 7 月 31 日至 8 月 1 日为 1 天,但上述计算为 1-31,或-29)。
在后端,在 PHP 中,我使用 gregoriantojd(),它似乎工作得很好(参见 this post 的例子)。我只是在 Javascript 中找不到等效的解决方案。
有人有什么想法吗?
【问题讨论】:
-
如果设备在同一天检出并归还,这些解决方案中的每一个都是不正确的。如果您不提供免费的当日租赁服务,您可能希望在代码中的某处使用
diff = Math.max(1, diff)! :]
标签: javascript date