1. ホーム
  2. javascript

[解決済み] 2つの日付の間の日数を計算する方法は?

2022-03-19 15:43:42

質問

例えば、入力ボックスに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>

JavaScript で 2 つの日付の間の日数を取得するにはどうすればよいですか?

どのように解決するのですか?

以下は クイック&ダーティ を実装しています。 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(名前に "UTC"を含まない)はユーザーのブラウザのローカルタイムゾーンで動作するので、一般にユーザーが予期しないタイムゾーンにいる場合は問題が発生し、コードは夏時間の遷移に対処しなければならないことに注意する必要があります。Dateオブジェクトとそのメソッドに関するドキュメントをよく読み、より複雑な操作を行う場合は、より安全で強力な日付操作のためのAPIを提供するライブラリの使用を強く検討する必要があります。

<サブ また、説明のために、このスニペットでは という名前のアクセスを window オブジェクト のような標準化されたAPIを使用する必要があります。 getElementById あるいは、UIフレームワークのようなものが考えられます。