我正在编写一个设备租赁应用程序,其中根据租期(以天为单位)向客户收取设备租赁费用。因此,基本上,(每日费用*天数)=总费用。
为了在客户端提供即时反馈,我尝试使用Javascript找出两个日历日期之间的差异。我到处搜寻,但找不到的正是我想要的东西。我见过的大多数解决方案都是以下形式:
function dateDiff1(startDate, endDate) {
return ((endDate.getTime() - startDate.getTime()) / 1000*60*60*24);
}
我的问题是,可以在这两个日期的一天中的任何时间将设备 check out 并退回,而无需另外付费。上面的代码用于计算两个日期之间的24小时周期的数量,这时我对日历天数非常感兴趣。
例如,如果某人在7月6日早上6点 check out 设备并在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中找不到等效的解决方案。
有人有想法么?
最佳答案
如果您想全天租用学生相机,例如...
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);
}
关于javascript - Javascript中的日期差异(忽略一天中的时间),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1036742/