JavaScriptで2つの日付の間の日数を取得するにはどうすればよいですか?例えば、インプットボックスに2つの日付があるとします。
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
<script>
alert(datediff("day", first, second)); // what goes here?
</script>
ここでは、質問で提示された問題を解決するための概念実証として、datediff
の簡単で汚い実装を紹介します。これは、2つの日付の間の経過ミリ秒を、それらを引き算することによって得ることができるという事実に依存しており、それはそれらを原始的な数値(1970年の始まりからのミリ秒)に強制します。
// new Date("dateString") is browser-dependent and discouraged, so we'll write
// a simple parse function for U.S. date format (which does no error checking)
function parseDate(str) {
var mdy = str.split('/');
return new Date(mdy[2], mdy[0]-1, mdy[1]);
}
function datediff(first, second) {
// Take the difference between the dates and divide by milliseconds per day.
// Round to nearest whole number to deal with DST.
return Math.round((second-first)/(1000*60*60*24));
}
alert(datediff(parseDate(first.value), parseDate(second.value)));
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
一般的に、ユーザーが想定していないタイムゾーンにいる場合に問題が発生する可能性があり、コードで夏時間の移行を処理する必要があります。Dateオブジェクトとそのメソッドのドキュメントをよく読み、より複雑な場合には、日付操作のためのより安全で強力なAPIを提供するライブラリの使用を強く検討する必要があります。
また、説明のために、スニペットでは簡潔にするためにwindow`オブジェクトへの名前付きアクセスを使用していますが、プロダクションではgetElementByIdのような標準化されたAPIを使用すべきですし、もっと言えば、何らかのUIフレームワークを使用すべきです。
この小さなユーティリティーを手に入れれば、その中にはあなたのための関数が含まれています。簡単な例を挙げてみましょう。
<script type="text/javascript" src="date.js"></script>
<script type="text/javascript">
var minutes = 1000*60;
var hours = minutes*60;
var days = hours*24;
var foo_date1 = getDateFromFormat("02/10/2009", "M/d/y");
var foo_date2 = getDateFromFormat("02/12/2009", "M/d/y");
var diff_date = Math.round((foo_date2 - foo_date1)/days);
alert("Diff date is: " + diff_date );
</script>