时差错误计算

时间:2012-01-05 21:04:31

标签: javascript date

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);
}
  

2012年3月31日,1/4/2012
  天数:0 //错误

  

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


  

2012年1月1日,2/1/2012
  天数:1 //确定

为什么?

1 个答案:

答案 0 :(得分:3)

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

您将在2012年1月31日至2012年1月1日之间获得-1天,因为这些日期被解释为2012年2月31日(2012年3月2日)和2012年3月1日。当您减去这些日期时,您会得到 - 1天的差异。

您将在2012年3月31日至2012年4月1日之间获得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天的差异。