new Date() / Date.now()
| 対応: | ES1(ECMAScript 1997) |
|---|
日時を扱うためのDateオブジェクトを作成します。現在日時の取得や、指定した日付の作成、タイムスタンプの取得ができます。
構文
// 現在の日時でDateオブジェクトを作成する
var now = new Date();
// 日付文字列からDateオブジェクトを作成する
var date = new Date("2025-04-15");
// 年・月・日を個別に指定してDateオブジェクトを作成する(月は0始まり)
var date = new Date(年, 月, 日, 時, 分, 秒);
// 現在のタイムスタンプをミリ秒で取得する
var timestamp = Date.now();
// 日付文字列をタイムスタンプに変換する
var timestamp = Date.parse("2025-04-15");
作成方法一覧
| 書式 | 概要 |
|---|---|
| new Date() | 引数なしで呼び出すと、現在の日時でDateオブジェクトが作成されます。 |
| new Date("日付文字列") | ISO 8601形式の文字列から作成します。『"2025-04-15"』『"2025-04-15T10:30:00"』などが指定できます。 |
| new Date(年, 月, ...) | 年・月・日・時・分・秒・ミリ秒を個別に指定します。月は『0』が1月、『11』が12月です。 |
| new Date(タイムスタンプ) | 1970年1月1日からのミリ秒数で作成します。 |
| Date.now() | 現在のタイムスタンプをミリ秒で返します。Dateオブジェクトは作成されません。 |
| Date.parse("日付文字列") | 日付文字列をタイムスタンプに変換して返します。無効な文字列の場合は『NaN』を返します。 |
サンプルコード
// 現在の日時を取得する
var now = new Date();
console.log(now); // 実行時点の日時が出力されます。
// 日付文字列から作成する
var date1 = new Date("2025-04-15");
console.log(date1);
// 年・月・日を個別に指定する(月は0始まりなので3が4月)
var date2 = new Date(2025, 3, 15, 10, 30, 0);
console.log(date2);
// Date.now() で現在のタイムスタンプを取得する
var timestamp = Date.now();
console.log(timestamp); // 1970年1月1日からの経過ミリ秒が出力されます。
// タイムスタンプからDateオブジェクトを作成する
var fromTimestamp = new Date(1713150000000);
console.log(fromTimestamp.toISOString());
// Date.parse() で文字列をタイムスタンプに変換する
var parsed = Date.parse("2025-04-15T10:30:00");
console.log(parsed);
// 処理時間を計測する実用例
var start = Date.now();
for (var i = 0; i < 1000000; i++) {} // 何らかの処理
var end = Date.now();
console.log(end - start + "ミリ秒"); // 処理にかかった時間が出力されます。
// ※ 実行日時により出力が異なります 2025-04-15T00:00:00.000Z 2025-04-15T01:30:00.000Z 2024-04-15T03:00:00.000Z 1744680600000
よくあるミス
ミス1: 月が0始まり
『new Date(年, 月, 日)』の月は0始まりです。1月が0、12月が11に対応するため、4月を指定したい場合は4ではなく3を渡します。
// NG: 4を渡すと5月になる var date = new Date(2025, 4, 15); console.log(date.getMonth()); // 4 (5月)
修正後は次の通りです。
// OK: 4月は3を指定する var date = new Date(2025, 3, 15); console.log(date.getMonth()); // 3 (4月)
ミス2: 文字列比較でDateを比較しようとする
Dateオブジェクトを『toString()』で文字列化して比較すると、環境によって文字列のフォーマットが異なるため意図通りに動かない場合があります。『getTime()』でタイムスタンプ(数値)に変換すると、大小比較を正確に行えます。
// NG: 文字列に変換して比較するのは不正確
var d1 = new Date("2025-04-01");
var d2 = new Date("2025-12-31");
if (d1.toString() < d2.toString()) {
console.log("d1が古い"); // 文字列比較は意図通りに動かない場合がある
}
修正後は次の通りです。
// OK: タイムスタンプ(数値)で比較する
var d1 = new Date("2025-04-01");
var d2 = new Date("2025-12-31");
if (d1.getTime() < d2.getTime()) {
console.log("d1が古い"); // 正確に比較できる
}
概要
Dateオブジェクトは日付と時刻を扱うためのJavaScriptの組み込みオブジェクトです。内部的には1970年1月1日0時0分0秒 UTCからの経過ミリ秒数として日時を管理しています。この基準時点をUNIXエポックと呼びます。
『new Date(年, 月, 日)』で作成する際、月は0から始まります。1月は『0』、12月は『11』です。これはJavaScriptの仕様上、最もよくあるミスの1つです。一方、日は1から始まるため、4月15日は『new Date(2025, 3, 15)』と書きます。
『Date.now()』はDateオブジェクトを作成せずにタイムスタンプだけを取得できるため、処理時間の計測など、日時オブジェクトが不要な場面で効率的です。作成したDateオブジェクトから年・月・日などを個別に取得するには『日付.getFullYear()』などのメソッドを使用します。
対応ブラウザ
2 以前 ×
2 以前 ×
Android Browser
37 以降 ○
4 以前 ×
Chrome Android
36 以降 ○
17 以前 ×
Firefox Android
79 以降 ○
3 以前 ×記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。