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
Days Count: 0 //wrong
或
31/1/2012 , 1/2/2012
Days Count: -1 //wrong
1/1/2012 , 2/1/2012
Days Count: 1 //ok
为什么?
最佳答案
知道 JS 月份是从 0 开始的,对此非常重要。您的代码将日期 2012 年 1 月 31 日解析为 2012 年 二月 31 日,这在技术上是无效日期,但被解释为 2012 年 3 月 2 日(第二日,因为 2012 年是闰年)。您需要做的是从 parts[1]
值中减去 1
,然后再将其传递给 Date
构造函数。
您在 31/1/2012 和 1/2/2012 之间得到 -1 天,因为这些日期被解释为 2012 年 2 月 31 日(2012 年 3 月 2 日)和 2012 年 3 月 1 日。当您减去这些日期时,您会得到 - 1 天的差异。
您在 31/3/2012 和 1/4/2012 之间得到 0 天,因为这些日期被解释为 2012 年 4 月 31 日(2012 年 5 月 1 日)和 2012 年 5 月 1 日,这是同一日期,导致 0-日差。
您在 1/1/2012 和 2/1/2012 之间得到 1 天,因为这些日期被解释为 2012 年 2 月 1 日和 2012 年 2 月 2 日,导致 1 天的差异。
关于javascript - 时差计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8749790/