2012-01-05 17 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
日数:-1 //間違った


2012年1月1日、2012年2月1日
日数:1 // OK

なぜ?

+3

月は「0」で始まります。参照してくださいhttps://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/DateのJavaScriptの '日中 –

+0

ヶ月()は' '11 '(12月)に' 0 '(1月)から番号が付けられています。心に留めておきます。 – Tadeck

+0

どのようにそれを修正するには? –

答えて

3

JS月が0ベースであることがわかっているのは、非常に重要なことです。です。あなたのコードでは、技術的に無効な日付ですが(2012年がうるう年であるため、第二)2012年3月2日と解釈される31 2012、に日付31/1/2012を解析しています。あなたがする必要があるのはの値から1を引いてからDateのコンストラクタに渡します。

あなたはこれらの日付を引くときに、あなたが得る2012年3月、これらの日付は2012年2月31日(2012年3月2日)として解釈されているので、-1 31/1/2012と2012年1月2日の間の日を取得し、1されています-1日差。

2012年3月31日(2012年5月1日)と2012年5月1日(2012年5月1日)と解釈されるため、2012年3月31日から2012年1月4日まで0日間となります。日差。

これらの日付が1日違いで、その結果、2012年2月1日と2012年2月2日と解釈されているので、あなたは、2012年1月1日と2012年2月1日の間の1日になっています。