2012-01-05 102 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天的差異。