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年という結果が出ました。早いものですね。同じようにやれば、自分の誕生日からの経過秒数なども計算できます。
コメント