JavaScriptのnew Date();とは?

JavaScriptにおける`new Date();`とは?

JavaScriptで日付や時間を扱う場合、`new Date();`は欠かせない存在です。この構文は、現在の時刻や指定した日時情報を保持する`Date`オブジェクトを生成します。本稿では、`new Date();`の基本的な使い方から、日付・時刻の取得、設定、そしてフォーマット変換まで、具体的なコード例を交えながら詳しく解説していきます。

`new Date()` コンストラクタ

`new Date()` は、`Date`オブジェクトを作成するためのコンストラクタです。コンストラクタとは、オブジェクト指向プログラミングにおいて、オブジェクトを生成するための特別な関数のことです。`new`キーワードと共に用いることで、新たな`Date`オブジェクトが生成され、変数に代入されます。


const now = new Date();
console.log(now); // 例:Mon Oct 23 2023 10:20:30 GMT+0900 (日本標準時) 

上記のコードでは、`now`という変数に、`new Date()`によって生成された現在の時刻を持つ`Date`オブジェクトが格納されます。`console.log(now)`を実行すると、コンソールに現在の日時が表示されます。

`Date`オブジェクトによる日時情報の取得

`Date`オブジェクトには、年、月、日、時、分、秒、ミリ秒といった様々な日時情報を取得するためのメソッドが用意されています。以下に代表的なメソッドと使用方法をまとめます。

メソッド 説明
`getFullYear()` 年 (西暦) を取得 `now.getFullYear(); // 2023`
`getMonth()` 月 (0 から 11) を取得 (注意: 0 が 1 月) `now.getMonth(); // 9 (10 月)`
`getDate()` 日 (1 から 31) を取得 `now.getDate(); // 23`
`getHours()` 時 (0 から 23) を取得 `now.getHours(); // 10`
`getMinutes()` 分 (0 から 59) を取得 `now.getMinutes(); // 20`
`getSeconds()` 秒 (0 から 59) を取得 `now.getSeconds(); // 30`
`getMilliseconds()` ミリ秒 (0 から 999) を取得 `now.getMilliseconds(); // 例: 500`
`getDay()` 曜日 (0 から 6) を取得 (注意: 0 が日曜日) `now.getDay(); // 1 (月曜日)`

これらのメソッドを活用することで、`Date`オブジェクトから必要な日時情報を個別に取得することが可能です。

特定の日時を指定して`Date`オブジェクトを生成

`new Date()` コンストラクタには、引数を渡すことで特定の日時を指定して`Date`オブジェクトを生成することができます。引数の指定方法には、以下のパターンがあります。

  1. 日付と時刻を個別に指定:

    const date1 = new Date(2024, 0, 1, 0, 0, 0); // 2024 年 1 月 1 日 0 時 0 分 0 秒
        
  2. 日付を表す文字列を指定:

    const date2 = new Date("2024-01-01T00:00:00"); // 2024 年 1 月 1 日 0 時 0 分 0 秒
        
  3. ミリ秒単位の経過時間を指定:

    const date3 = new Date(1708665600000); // 2024 年 1 月 1 日 0 時 0 分 0 秒 (UTC)
        

日付・時刻のフォーマット変換

`Date`オブジェクトから取得した日時情報は、そのままでは人間にとって読みづらい形式です。そこで、`toLocaleDateString()`や`toLocaleTimeString()`といったメソッドを使用して、日付や時刻を地域や言語に合わせた形式にフォーマット変換することができます。


const now = new Date();
const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
console.log(now.toLocaleDateString('ja-JP', options)); // 例:2023年10月23日月曜日
console.log(now.toLocaleTimeString('ja-JP')); // 例:10:20:30

参考資料

よくある質問

Q1. `getMonth()`が0から始まるのはなぜですか?

A1. これは歴史的な理由によるものです。JavaScriptの`Date`オブジェクトは、Javaの`java.util.Date`クラスを参考に設計されました。Javaでは、配列のインデックスが0から始まることに合わせて、月の値も0から始まるようになっています。そのため、JavaScriptでも同様の仕様が採用されています。

Q2. `Date`オブジェクトの時刻は、ローカルタイムとUTCのどちらですか?

A2. `Date`オブジェクトは、内部的にはUTC(協定世界時)で時刻を保持しています。ただし、`getHours()`や`getMinutes()`などのメソッドを使用すると、デフォルトではブラウザのタイムゾーン設定に基づいたローカルタイムが返されます。UTC時刻を取得したい場合は、`getUTCHours()`や`getUTCMinutes()`などのメソッドを使用します。

Q3. 日付の計算を行うにはどうすればよいですか?

A3. `Date`オブジェクトは、日付の計算に特化したメソッドを提供していません。そのため、ミリ秒単位の経過時間を利用して計算を行う必要があります。例えば、現在の日付から1日後の日付を取得するには、以下のコードのようにします。


const now = new Date();
const tomorrow = new Date(now.getTime() + 24 * 60 * 60 * 1000); // 24時間 * 60分 * 60秒 * 1000ミリ秒

上記のように、`getTime()`メソッドで現在の時刻をミリ秒単位で取得し、それに1日分のミリ秒数を加算することで、1日後の日時を表現する新しい`Date`オブジェクトを作成できます。

その他の参考記事:JavaScriptの日付