【JavaScript】Dateオブジェクトにおける日時の計算方法

Javascriptで日時を扱うときは、Dateオブジェクトを用いるのが一般的です。以下のように書くと、現在日時の情報を持ったオブジェクトが作成されます。

let today = new Date();

//Thu Dec 10 2020 00:59:51 GMT+0900 (日本標準時)

指定した日時に設定

Dateオブジェクトを宣言するときに、引数に渡す値によって日時の初期値が変わります。

以下は数値を引数として初期化する方法です。第1引数の年は西暦で設定します。第2引数は月に対応しますが、0~11の範囲なので、実際の月から1引いた数を設定するようにします。

以下の例では、1999年6月20日 15時30分20秒となります。

//年(西暦)、月、日、時、分、秒、ミリ秒
let date = new Date(1999,5,20,15,30,20);

以下のように文字列を引数として初期化することもできますが、フォーマットに整形する手順が入る時点で確実ではないため、数値を使って初期化するほうが良いでしょう。

let date = new Date("1999-5-20 15:30:20");

Dateオブジェクトから日時を取得

時間を取得する

時間を取得する専用の関数をまとめて紹介します。月を取得するgetMonth()関数では、返り値が0~11の範囲なので、1を加算するのがポイントです。

これは年~ミリ秒までをまとめてコンソールに出力するサンプルです。

let today = new Date();
showDateConsole(today);

function showDateConsole(dateObj){
    // 年
    let year = dateObj.getFullYear();
    // 月
    let month = dateObj.getMonth() + 1;
    // 日
    let date = dateObj.getDate();
    // 時
    let hour = dateObj.getHours();
    // 分
    let minute = dateObj.getMinutes();
    // 秒
    let second = dateObj.getSeconds();
    // ミリ秒
    let ms = dateObj.getMilliseconds();

    console.log(year + "年" + month + "月" + date +"日");
    console.log(hour + "時" + minute + "分" + second +"秒" + ms);
}


    // 2020年12月9日
    // 0時17分36秒312

曜日を取得する

曜日を取得するには、getDay関数を用います。返り値は0~6の数字なので、それに見合った配列などを用意してあげるといいでしょう。

これは今日の曜日をコンソールに表示するサンプルです。

let dayArray = ["日","月","火","水","木","金","土"];
let today = new Date();

console.log(dayArray[today.getDay()] + "曜日");
// 火曜日

日時の加算・減算・差分の求め方

Dateオブジェクトには、setYearやsetMonthなどの、時間単位ごとに設定する関数が用意されています。例えば、「現在時刻から1年後」にするには、
・現在の年を取得
・現在の年に1を加算
・計算結果をオブジェクトに適応
という流れになります。

1週間後の日にちを求めるには、7日を加算します。

// 1999年6月20日 15時30分20秒
let date = new Date(1999,5,20,15,30,20);

// 1年後にする
date.setYear(date.getFullYear() + 1);
// 10ヶ月後にする
date.setMonth(date.getMonth() + 10);
// 7日後(一週間後)にする
date.setDate(date.getDate() + 7);
// 3時間後にする
date.setHours(date.getHours() + 3);
// 30分後にする
date.setMinutes(date.getMinutes() + 7);
// 1秒後にする
date.setSeconds(date.getSeconds() + 1);

// 結果:Fri Apr 27 2001 18:37:21 GMT+0900 (日本標準時)

時間を減算する、つまり「○分前を求める」には、加算の逆をすればいいだけです。

// 1999年6月20日 15時30分20秒
//let date = new Date(1999,5,20,15,30,20);

// 1000年前にする
date.setYear(date.getFullYear() - 1000);
// 10ヶ月前にする
date.setMonth(date.getMonth() - 10);
// 7日前(一週間前)にする
date.setDate(date.getDate() - 7);
// 3時間前にする
date.setHours(date.getHours() - 3);
// 30分前にする
date.setMinutes(date.getMinutes() - 7);
// 1秒後前する
date.setSeconds(date.getSeconds() - 1);

// 結果:Mon Aug 13 0998 12:23:19 GMT+0918 (日本標準時)

日時の差分の求め方

先程は、Dateオブジェクトの時間単位ごとに計算を行いましたが、Dateオブジェクトごと減算することで、2つの日付間の差分を求めることができます。

ソ連が崩壊してから今日までの日数を求めてみましょう。

日付間の差分を計算すると、ミリ秒単位での時間が算出されます。それを86,400,000ミリ秒(1日)で割ると、経過日数が算出できます。(小数点以下は切り捨てています)

// 今日 2020年12月10日
let today = new Date();
// ソ連崩壊 1997年12月26日
let dissolutionSoviet = new Date(1991,11,26);

let betweenMs = today - dissolutionSoviet;

// 913855941641(ms)
console.log(betweenMs);

let betweenDay = betweenMs / 86400000;

// ソ連崩壊から 10577 日
console.log("ソ連崩壊から",parseInt(betweenDay),"日");

ソ連崩壊から約28年という結果が出ました。早いものですね。同じようにやれば、自分の誕生日からの経過秒数なども計算できます。

コメント

タイトルとURLをコピーしました