JavaScriptには、あらかじめ用意されているDateオブジェクトというものがあります。
例えば、現在時刻を表示したり時間を測定したい場合などにDateオブジェクトが使われます。

今回は、Dateオブジェクトとは何か、またDateオブジェクトの作成方法について解説していきます。

Dateオブジェクト

Dateオブジェクトは、JavaScriptのビルドインオブジェクトの一つです。
JavaScriptにはビルドインオブジェクトがいくつかありますが、その中でもDateオブジェクトは日付や時刻を扱うためのオブジェクトです。

Dateオブジェクトをインスタンス化することで、特定の時刻を表すオブジェクトを作成することができます。
Dateオブジェクトにおける時刻は、協定世界時(UTC)である1970年1月1日0時0分0秒が基準となっています。

Dateオブジェクトから得られた時刻を元に、さまざまなメソッドを使って年や月などの特定の要素へアクセスすることができます。

Dateオブジェクトの作成

Dateオブジェクトを作成するには、new Date()を呼びます。
以下のいずれかのパターンを使うことで、Dateオブジェクトのインスタンスを生成することができます。

  • new Date()
  • new Date(milliseconds)
  • new Date(datestring)
  • new Date(year, month, date, hours, minutes, seconds, ms)

引数の指定が異なるため、一つずつ見ていきましょう。

現在日時で作成

new Date()のように引数の指定がない場合、現在の日付と時刻でDateオブジェクトが生成されます。

let now = new Date();

console.log(now); // Wed Jun 01 2022 15:20:56 GMT+0900 (日本標準時)

new Date()を行うと、現在の日付と時刻、その地域のタイムゾーンが出力されることが確認できます。

一般的なブラウザ環境では、タイムゾーンや滞在地域の情報が設定されているため、実行環境のタイムゾーンによって得られる値が異なることがあります。

経過ミリ秒から作成

基準日時から経過したミリ秒を指定してDateオブジェクトを作成することもできます。

new Date(milliseconds);

そのため、引数に0を指定すると基準日時を意味します。

// Thu Jan 01 1970 00:00:00 UTC+0を意味する
let date = new Date(0);

console.log(date); // Thu Jan 01 1970 01:00:00 GMT+0100 (中央ヨーロッパ標準時)

基準日時から経過したミリ秒を引数に指定すると、それに等しい日付と時刻を持つDateオブジェクトを作ることができます。

// 1秒経過:Thu Jan 01 1970 00:00:01 UTC+0
let date_1 = new Date(1000);

// 24時間経過:Fri Jan 02 1970 00:00:00 UTC+0
let date_2 = new Date(24 * 3600 * 1000);

date_1は、基準日時から1秒経過後の日時を持つインスタンスを作成し、date_2は、24時間経過後の日時を持つインスタンスを作成しています。

ミリ秒を表す数値型の値を引数に指定する場合、UTCからの経過ミリ秒が計算されるため、タイムゾーンについて考慮する必要がありません。

このような基準日時から経過したミリ秒のことをタイムスタンプと呼びます。

文字列から作成

引数に日付や時刻を表す文字列を指定することもできます。その場合、文字列が自動的にその時刻に変換されます。

new Date(datestring);

文字列の表記形式は厳密に決められていませんが、以下のように記述することができます。

// 年月日を表す文字列
let date_1 = new Date('2020/1/3');
let date_2 = new Date('1/3/20');

console.log(date_1); // Fri Jan 03 2020 00:00:00 GMT+0100 (中央ヨーロッパ標準時)
console.log(date_2); // Fri Jan 03 2020 00:00:00 GMT+0100 (中央ヨーロッパ標準時)


// 年月日+時刻を表す文字列
let date_3 = new Date('2020-01-03T12:30:50');
let date_4 = new Date('January 3, 2020 12:30:50');

console.log(date_3); // Fri Jan 03 2020 12:30:50 GMT+0100 (中央ヨーロッパ標準時)
console.log(date_4); // Fri Jan 03 2020 12:30:50 GMT+0100 (中央ヨーロッパ標準時)

指定要素から日付を作成

次のように、年月日や時分秒などを部分ごとに数値で指定する方法もあります。
この場合、ローカルタイムゾーンにおける時刻を取得します。

new Date(year, month, date, hours, minutes, seconds, ms);

引数を指定する際、次のようなルールがあります。

  • year:4桁表記で必ず指定
  • month:0(1月)〜11(12月)で必ず指定
  • date:指定がなければデフォルトで1となる
  • hours/minutes/seconds/ms:指定がなければデフォルトで0となる

以下は全く同じ結果が得られます。
date_1はすべての要素を指定した場合、date_2は必須の要素のみ指定した場合です。

let date_1 = new Date(2020, 0, 1, 0, 0, 0, 0); // 1 Jan 2020, 00:00:00
let date_2 = new Date(2020, 0); // 上記と同じ。dateは1, 他は0がデフォルトとなる

例えば、以下の要素を引数に指定すると、1995年4月2日、14時30分50秒を取得することができます。

let date = new Date(1995, 3, 2, 14, 30, 50, 110);

console.log(date); // Sun Apr 02 1995 14:30:50 GMT+0200 (中央ヨーロッパ夏時間)

まとめ

今回は、Dateオブジェクトの作成方法について解説しました。

// ポイント
* Dateオブジェクトは、日付と時刻を表すビルドインオブジェクト
* new Date()で、現在時刻を取得する
* new Date(milliseconds)で、UTCからの経過時刻を取得する
* new Date(datestring)で、文字列が表す時刻を取得する
* new Date(year, month,...)で、要素が示す時刻を取得する

これらの方法でDateオブジェクトを作成することができたら、さまざまなメソッドを使って日付や時間の操作ができるようになります。ぜひ参考にしてください。

合わせて読みたいDateオブジェクトシリーズ

第1回:Dateオブジェクトの作成(当記事)
第2回:Dateオブジェクトとインスタンスメソッド -日付・時刻の取得
第3回:Dateオブジェクトとインスタンスメソッド -文字列の取得
第4回:Dateオブジェクトとインスタンスメソッド -経過ミリ秒の取得
第5回:Dateオブジェクトと静的メソッド