时差计算错误

Time differences wrong calculation

本文关键字:错误 计算 时差      更新时间:2023-09-26
function parseDate(s){
    var parts = s.split('/')
    return new Date(parts[2], parts[1], parts[0])
}
function calcDaysBetween(startDate, endDate){
    return Math.floor((endDate-startDate)/86400000);
}
function yarro(){
    var startDate = parseDate($('#pickupdate').val());
    var endDate = parseDate($('#dropoffdate').val());
    var days = calcDaysBetween(startDate, endDate);
    $('#newp').html('Days Count: <b>'+days);
}

31/3/2012 , 1/4/2012
天数计数: 0//错误

31/1/2012 , 1/2/2012
天数计数: -1//错误


1

/1/2012 , 2/1/2012
天数: 1//ok

为什么?

知道 JS 月份是从 0 开始的,对此非常重要。 您的代码将日期 31/1/2012 解析为 2012 年 2 月 31 日,这在技术上是无效的日期,但被解释为 2012 年 3 月 2 日(第二个,因为 2012 年是闰年(。 您需要做的是从parts[1]值中减去1,然后再将其传递给Date构造函数。

您在 2012 年 1 月 31 日和 2012 年 1 月 2 日之间得到 -1 天,因为这些日期被解释为 2012 年 2 月 31 日(2012 年 3 月

2 日(和 2012 年 3 月 1 日。 当您减去这些日期时,您会得到 -1 天的差异。

您在 2012 年 3 月 31 日和 2012 年 1 月 4 日之间得到 0 天,因为这些日期被解释为 2012 年 4 月 31 日(2012 年 5 月

1 日(和 2012 年 5 月 1 日,这两个日期是同一日期,导致 0 天差异。

您在 2012 年 1 月 1 日和 2012 年 2 月 1 日之间得到 1 天,因为这些日期被解释为 2012 年 2 月 1

日和 2012 年 2 月 2 日,从而导致 1 天的差异。