Dateの使い方を毎回調べるのも面倒なのでまとめみた
Javascriptで日時を扱うときにはDateオブジェクトを使います。
Dateを使うと現在時刻をさくっと取得できるほか、日時がらみの計算が楽になります。
使う度に調べているのでこの機会にまとめてみました。自分に必要ない機能は省いています。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date
Dateオブジェクトを生成する
Dateオブジェクトは以下のように生成します。引数を省略すると現在時刻になります。
Dateオブジェクトで一番の注意点は「月は0〜11」という点です。私は毎回これを忘れて日付の取得や設定でハマります。
var now = new Date();//現在の日付、時刻で生成
var someday = new Date(1995, 11, 12); //12月17日になる!
var someday_sometime1 = new Date('December 12, 1995 03:20:15');
var someday_sometime2 = new Date('1995-12-12T03:20:15');
var someday_sometime3 = new Date(1995, 11, 12, 3, 20, 15);
日付や時刻の取得・設定メソッド
Dateオブジェクトから日付や時刻を取得したり、設定するときは以下のメソッドを使います。
var date = new Date();
でオブジェクトを生成しているとします。
「年」(西暦)を取得・設定
date.getFullYear();
date.setFullYear(2021);
「月」(0–11)を取得・設定
//月は 0-11 であること注意!*/
date.getMonth();
date.setMonth(10);
「日」(1–31)を取得・設定
date.getDate();
date.setDate(20);
「曜日」(0–6)を取得
date.getDay(); // 0は日曜日
「時」(0–23)を取得・設定
date.getHours();
date.setHours(8);
「分」(0–59)を取得・設定
date.getMinutes();
date.setMinutes(12);
「秒」(0–59)を取得・設定
date.getSeconds();
date.setSeconds(30);
「ミリ秒」(0–999)を取得・設定
date.getMilliseconds();
date.setMilliseconds(500);
日時をミリ秒換算で取得する
//UTCの1970年1月1日00:00:00からの経過ミリ秒を取得・設定(それ以前は負の値);
//タイムゾーンに関係のない時間が取得できる
date.getTime();
date.setTime(1625464151633);
Dateオブジェクトを複製する
Dateオブジェクトを他のオブジェクトに代入すると、参照渡しになってしまうみたいです。
参照させずにコピーしたいときには、getTime()を使うといいみたいです。
var date2= new Date(date.getTime()); //時刻の複製
タイムゾーンのオフセットを分単位で取得
date.getTimezoneOffset();
// -540
// 日本の場合
.setTimezoneOffset()はない!タイムゾーンは環境依存で設定はできない
他のものはgetとsetが対になっているのですが、.setTimezoneOffset()はありません。
タイムゾーンは実行環境のものが使われるそうです。
なのでタイムゾーンに左右されたくないときにはUTC対応のgetUTCxxx
、setUTCxxx
や getTime
、setTime
を使うと良さそうです。
日時の計算方法
経過時間を計算する
Dateオブジェクト同士で引き算すると、ミリ秒単位で経過時間が得られます。
const start = new Date();
//何かの処理
const end = new Date();
const time = start - end;
// timeはミリ秒
//経過時間を秒、分、時、日に変換
const sec = time/1000 //何秒かに変換
const min = time/1000/60 //何分かに変換
const hours = time/1000/60/60 //何時間かに変換
const days = time/1000/60/60/24 //何日かに変換
//日・時・分・秒の組み合わせに変換
const sec = Math.floor(time/1000)%60;
const min = Math.floor(time/1000/60)%60;
const hours = Math.floor(time/1000/60/60)%24;
const days = Math.floor(time/1000/60/60/24);
日時を進める・戻す
日付を進めたり戻したりするには、getメソッドで取得した情報を加減してsetメソッドで戻します。
加減した値がそれぞれのパラメーターの範囲を超えてもきちんと計算されます。
例えば、date.setMonth(date.getMonth() - 12);
とすると去年の同じ月になります。
var date = new Date();
console.log(date.toLocaleString());
//"2021/11/5 16:13:47"
date.setMonth(date.getMonth() + 2);
console.log(date.toLocaleString());
//"2022/1/5 16:13:47"
文字列への変換メソッド
Dateオブジェクト文字列に変換するメソッドがいろいろあります。使うメソッドによって書式をいろいろ変えられます。
「日付」を返す
date.toDateString();
// 'Fri Nov 05 2021'
「日付」を地域の書式に合わせて返す
日本とアメリカでは年月日の順番や表記が違ったりするので、このメソッドを使うと日本式で取得できます。
date.toLocaleDateString();
// '2021/11/5'
date.toLocaleDateString("ja-JP-u-ca-japanese");//日付を年号付きで取得
// "R3/11/5"
日付を年号で取得する
date.toLocaleString()にパラメーターを設定すると、年号付きで日付を取得できます。
//日時を年号付きで取得
date.toLocaleString("ja-JP-u-ca-japanese");
// 'R3/11/5 12:20:11'
日時をを地域の書式に合わせて返す
date.toLocaleString();
// '2021/11/5 12:20:11'
時刻をを地域の書式に合わせて返す
date.toLocaleTimeString();
// '12:20:11'
日時を返す
date.toString();
// 'Fri Nov 05 2021 12:20:11 GMT+0900 (日本標準時)'
時刻を返す
date.toTimeString();
// '12:20:11 GMT+0900 (日本標準時)'
UTCで日時を返す
UTC関係はgetUTCxxx、setUTCxxxというメソッドがあります。
date.toUTCString();
// 'Fri, 05 Nov 2021 03:20:11 GMT'