我正在编写一个设备租赁应用程序,其中根据租赁期限(以天为单位)向客户收取租赁设备的费用。所以,基本上,(每日费用 * 天数)= 总费用。
为了获得客户端的即时反馈,我尝试使用 Javascript 来找出两个日历日期的差异。我四处寻找,但没有发现任何东西是我正在寻找的。我见过的大多数解决方案都是以下形式:
function dateDiff1(startDate, endDate) {
return ((endDate.getTime() - startDate.getTime()) / 1000*60*60*24);
}
我的问题是,在这两个日期期间,可以在一天中的任何时间检查和归还设备,无需额外付费。上面的代码计算两个日期之间的 24 小时周期数,而我真正对日历天数感兴趣。
例如,如果有人在 7 月 6 日早上 6 点检查设备,并在 7 月 7 日晚上 10 点归还设备,则上述代码将计算出已经过去了超过 1 个 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(),它似乎工作得很好(请参阅这个帖子举个例子)。我只是在 Javascript 中找不到等效的解决方案。
有人有主意吗?
如果您想要一整天的学生相机租赁示例......
function daysBetween(first, second) {
// Copy date parts of the timestamps, discarding the time parts.
var one = new Date(first.getFullYear(), first.getMonth(), first.getDate());
var two = new Date(second.getFullYear(), second.getMonth(), second.getDate());
// Do the math.
var millisecondsPerDay = 1000 * 60 * 60 * 24;
var millisBetween = two.getTime() - one.getTime();
var days = millisBetween / millisecondsPerDay;
// Round down.
return Math.floor(days);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)