2012-01-05 80 views
1
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,2012/1/4
天数:0 //错误的时间差计算错误

31/1/2012 ,1/2/2012
Days Count:-1 // wrong


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

为什么?

+3

几个月以'0'开头。请参阅https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date – 2012-01-05 21:07:57

+0

JavaScript的Date()中的月份从“0”(1月)到“11”(12月)编号。记住这一点。 – Tadeck 2012-01-05 21:08:05

+0

那么如何解决它? – 2012-01-05 21:12:42

回答

3

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

你得到-1 31/1/2012和2012/1/2之间的天数,因为这些日期被解释为2012年2月31(2 2012年3月)和1 2012年3月当你减去这些日期,你会得到一个-1天的差异。

你得到31/3/2012 2012/1/4和0之间的天,因为这些日期被解释为2012年4月31(1 2012年5月)和1 2012年5月,这是相同的日期,导致0日差异。

你得到1/1/2012和2012/2/1之间1天,因为这些日期被解释为2012年2月1日和2 2012年2月,导致1天的差异。