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 //确定
为什么?
答案 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天的差异。