Javascript プログラミング 備忘録

JavascriptのDateオブジェクトの使い方をまとめてみた(生成、操作、複製、年号)

Dateの使い方を毎回調べるのも面倒なのでまとめみた

Javascriptで日時を扱うときにはDateオブジェクトを使います。

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対応のgetUTCxxxsetUTCxxxgetTimesetTimeを使うと良さそうです。

日時の計算方法

経過時間を計算する

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'

-Javascript, プログラミング, 備忘録