Javascript中的日期差异(忽略一天中的时间)

我正在写设备租赁申请,根据租赁期限(以天计),向客户收取设备租赁费用。 所以,基本上(每日费用*天数)=总费用。

对于客户端的即时反馈,我试图用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(),这似乎工作得很好(请参阅本文中的示例)。 我无法在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);
}

我发现这个问题后就遇到了这个问题并解决了问题,于是我回来发布这个问题。 无论时间如何,这将获得总天数。 DST不会搞砸了:

date1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());
date2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());
var ms = Math.abs(date1-date2);
return Math.floor(ms/1000/60/60/24); //floor should be unnecessary, but just in case

技巧是转换为UTC日期,甚至不知道原始日期的时间。


我会做的是将两个日期的时间设置为同一时间。 例如,将endDate的时间设置为12:00 am,并将startDate的时间设置为12:00 am。 然后弄清它们之间的区别。

另一方面,由于我也在租赁设备软件行业,因此您似乎因为不计算小时数而失去租赁收入。 根据你的例子,如果有人在7月6日早上6点拿起设备,并于7月7日晚上10点将其返回。 他们有两整天的时间来使用这些设备,可能还会产生多余的电量。

链接地址: http://www.djcxy.com/p/36701.html

上一篇: Date difference in Javascript (ignoring time of day)

下一篇: Calculating the difference between two Java date instances