2010-11-30 2 views
10

Javascriptで月数の差を計算するにはどうすればよいですか? What's the best way to calculate date difference in JavascriptJavaScriptの月の相違

しかし、いくつかの数ヶ月は、他よりも日数の数が異なるときに、これらは、MS差の周りに基づいています。

あっなどと同様の質問がありますのでご注意ください!

2つの日付の月の差を計算する簡単な方法はありますか?

ただ明確にするために、私は例えば、日付をまたぐ何ヶ月知っておく必要があります。

Jan 29th 2010, and Feb 1st 2010 = 2 months 
Jan 1st 2010, and Jan 2nd 2010 = 1 month 
Feb 14th 2010, Feb 1st 2011 = 13 months 
Feb 1st 2010, March 30th 2011 = 14 months 
+0

正確に月間の違いは何ですか?全カレンダー月、例えば12Apr2010→16Jun2010 = 1;または開始日から取られた月の長さ。例えば、12Apr2010 - > 16Jun2010 = 2。または小数部分も計算したいですか?その場合。毎日何の価値がありますか? 2月の1月は1/28、12月の1月は1/31になりますか?それから、うるう年があります... –

+0

http://stackoverflow.com/questions/2536379/difference-in-months-between-two-dates-in-javascript – ArK

+0

申し訳ありません、 。 –

答えて

19
DisplayTo.getMonth() - DisplayFrom.getMonth() + (12 * (DisplayTo.getFullYear() - DisplayFrom.getFullYear()))); 

getMonthマイナスgetMonthはあなたの日付の2ヶ月の間、月差を与えます。

次に12に年数の差を掛けて、これを結果に加えて、完全な月間スパンを与えます。

+4

ニースのライナー..誰か興味があればここにテストケースがあります。 http://jsfiddle.net/E5Bz3/1/ :) –

+1

素晴らしい解決策、私はこのために場所を検索しました...ありがとう... – hminaya

+0

たとえば、StartDate = 12月12日、そしてEndDate = 2013年1月1日。結果は1で、2ではありません。 – Marina

5

[編集]のコメントに基づいて、私は修正立っています。私はsomethngなどを使用したい受け入れ答えを使用する:

var datefrom = new Date('2001/03/15') 
    ,dateto = new Date('2011/07/21') 
    ,nocando = datefrom<dateto ? null : 'datefrom > dateto!' 
    ,diffM = nocando || 
      dateto.getMonth() - datefrom.getMonth() 
       + (12 * (dateto.getFullYear() - datefrom.getFullYear())) 
    ,diffY = nocando || Math.floor(diffM/12) 
    ,diffD = dateto.getDate()-datefrom.getDate() 
    ,diffYM = nocando || 
       (diffY>0 ? ' Year(s) ' : '') 
       + diffM%12+' Month(s) '+(diffD>0? (diffD+' day(s)') : '') ; 

console.log(diffYM); //=> 10 Year(s) 4 Month(s) 6 day(s) 
+0

2つの日付が:date1 = new Date( '2011/1/04') 、date2 = new Date( '2010/12/04')間違った回答を返す場合は、これは間違っています – ToDayIsNow

+0

あなたは絶対に正しいです、 Gullens onelinerをよく使う。それに基づいて編集された答え。 – KooiInc

3

私はウェブサイトhttp://ditio.net/2010/05/02/javascript-date-difference-calculation/で次を見つけた:あなたは日付のスパンですべての月を含める以来、私はちょうどそれに1を追加することによって、上記のコードを変更するでしょう、あなたの場合は

inMonths: function(d1, d2) { 
     var d1Y = d1.getFullYear(); 
     var d2Y = d2.getFullYear(); 
     var d1M = d1.getMonth(); 
     var d2M = d2.getMonth(); 

     return (d2M+12*d2Y)-(d1M+12*d1Y); 
    } 

return (d2M+12*d2Y)-(d1M+12*d1Y) + 1;

1
function calcualteMonthYr(){ 
    var fromDate =new Date($('#txtDurationFrom2').val()); // Date picker (text fields) 
    var toDate = new Date($('#txtDurationTo2').val()); 
    var months=0; 
     months = (toDate.getFullYear() - fromDate.getFullYear()) * 12; 
     months -= fromDate.getMonth(); 
     months += toDate.getMonth(); 
      if (toDate.getDate() < fromDate.getDate()){ 
       months--; 
      } 
    $('#txtTimePeriod2').val(months); // result 
} 
+0

あなたの答えをちょっと詳しく説明してください – Scorpio