このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Date() コンストラクター
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
Date() コンストラクターはDate オブジェクトを生成します。関数として呼び出された場合は、現在時刻を表す文字列を返します。
In this article
試してみましょう
const date1 = new Date("December 17, 1995 03:24:00");// Sun Dec 17 1995 03:24:00 GMT...const date2 = new Date("1995-12-17T03:24:00");// Sun Dec 17 1995 03:24:00 GMT...console.log(date1.getTime() === date2.getTime());// 予想される結果: true構文
new Date()new Date(value)new Date(dateString)new Date(dateObject)new Date(year, monthIndex)new Date(year, monthIndex, day)new Date(year, monthIndex, day, hours)new Date(year, monthIndex, day, hours, minutes)new Date(year, monthIndex, day, hours, minutes, seconds)new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds)Date()引数
Date() コンストラクターには 5 つの基本形があります。
引数なし
引数が与えられなかった場合、新しく生成されたDate オブジェクトはインスタンス化された時点の現在の日付と時刻を表します。返される日時のタイムスタンプは、Date.now() で返される数値と同じです。
時刻値またはタイムスタンプ値
日付文字列
dateStringDate.parse()で実装されているのと同じアルゴリズムを使用して解釈できる、日付を表す文字列値です。様々な書式を使用する場合の注意事項については、日時文字列形式を参照してください。
Date オブジェクト
dateObject既存の
Dateオブジェクトです。これは、既存のDateオブジェクトのコピーを、同じ日付と時刻で効率的に作成します。これはnew Date(dateObject.valueOf())と同じですが、valueOf()メソッドが呼び出されない点が異なります。
Date() コンストラクターに 1 つの引数が渡された場合、Date インスタンスは特別に扱われます。他のすべての値はプリミティブに変換されます。もし結果が文字列であれば、それは日時文字列として解釈されます。そうでない場合は、結果のプリミティブはさらに数値に強制され、タイムスタンプとして扱われます。
独立した日付と時刻の成分の値
少なくとも年と月が指定された場合、このDate() の形式はDate オブジェクトを返します。その成分値(年、月、日、時、分、秒、ミリ秒)はすべて以下の引数から得られます。欠落しているフィールドには、使用可能な最小の値(day には1、他にもすべての成分には0 )が指定されます。引数の値はすべて、UTC ではなくローカルのタイムゾーンに対して評価されます。Date.UTC() は同様の引数を受け入れますが、各成分を UTC として解釈し、タイムスタンプを返します。
いずれかの引数が定義された境界を超えた場合、「繰り上げ」が行われます。例えば、monthIndex に11 よりも大きな値が渡された場合、その月は年を増加させます。minutes に59 よりも大きな値が渡された場合、hours はそれに応じて増加します。したがって、new Date(1990, 12, 1) は 1991 年 1 月 1 日を返し、new Date(2020, 5, 19, 25, 65) は 2020 年 6 月 20 日の午前 2 時 5 分を返します。
同様に、何か引数がアンダーフローする場合は、上位の引数を「桁借り」します。例えば、new Date(2020, 5, 0) は、 2020 年 5 月 31 日を返します。
year年を表す整数値です。
0から99までの値は、1900から1999までの値にマッピングされます。他の値は実際の年になります。例をご覧ください。monthIndex月を表す整数値です。
0(1 月)から11(12 月)までの値です。day省略可月内の日を表す整数値です。既定値は
1です。hours省略可0から23までの間の整数値で、 1 日の中の時を表します。既定値は0です。minutes省略可整数値で、時刻の分の部分を表します。既定値は
0です。seconds省略可整数値で、時刻の秒の部分を表します。既定値は
0です。milliseconds省略可整数値で、時刻のミリ秒の部分を表します。既定値は
0です。
返値
new Date() (Date() コンストラクター)を呼び出すと、Date オブジェクトを返します。日時として無効な文字列、または構築される日時がタイムスタンプの-8,640,000,000,000,000 ミリ秒以前または8,640,000,000,000,000 ミリ秒より後になる場合、無効な日時(Date オブジェクトでtoString() メソッドが"Invalid Date" を返し、valueOf() メソッドがNaN を返すもの)を返します。
Date() 関数を(new キーワードなしで)呼び出すと、new Date().toString() と全く同じように、現在の日付と時刻を文字列で表現したものを返します。Date() 関数を(new キーワードなしで)呼び出す際に指定された引数は無視されます。無効な日付文字列で呼び出された場合でも、あるいは、任意のオブジェクトや他のプリミティブを引数として呼び出された場合でも、常に現在の日付と時刻を文字列で表現したものを返します。
解説
>時間の精度の低下
タイミング攻撃やフィンガープリンティングに対する保護機能を提供するために、someFile.lastModified の精度がブラウザーの設定に応じて丸められることがあります。Firefox では、privacy.reduceTimerPrecision 設定は既定で有効になっており、既定で 2 ミリ秒になります。この場合、精度は 100ms またはprivacy.resistFingerprinting.reduceTimerPrecision.microseconds の値のどちらか大きい方になります。
例えば、時刻の精度を下げた場合、someFile.lastModified の結果は常に 2 の倍数になり、privacy.resistFingerprinting を有効にした場合は 100 の倍数(またはprivacy.resistFingerprinting.reduceTimerPrecision.microseconds)になります。
// Firefox 60 での時間の制度の低下 (2ms)someFile.lastModified;// 取りうる値:// 1519211809934// 1519211810362// 1519211811670// …// `privacy.resistFingerprinting` が有効な場合の時間の制度の低下someFile.lastModified;// 取りうる値:// 1519129853500// 1519129858900// 1519129864400// …例
>Date オブジェクトを生成するいくつかの方法
以下の例で、JavaScript の Date を生成するいくつかの方法を示します。
const today = new Date();const birthday = new Date("December 17, 1995 03:24:00"); // 非推奨: すべてのランタイムで動作するとは限りませんconst birthday = new Date("1995-12-17T03:24:00"); // ISO-8601 互換であり、動作に信頼性がありますconst birthday = new Date(1995, 11, 17); // 月は 0 から始まりますconst birthday = new Date(1995, 11, 17, 3, 24, 0);const birthday = new Date(628021800000); // 元期のタイムスタンプを渡す日付でも文字列でも数値でもない値を渡す
もし、Date() コンストラクターがDate インスタンスではない 1 つの引数で呼び出された場合、プリミティブに変換された後、文字列であるかどうかがチェックされます。例えば、new Date(undefined) はnew Date() とは異なります。
console.log(new Date(undefined)); // Invalid Dateこれは、undefined は既にプリミティブであるものの、文字列ではないため、数値であるNaN に変換され、タイムスタンプとして有効なものにならないからです。他にも、null は0 に変換されます。
console.log(new Date(null)); // 1970-01-01T00:00:00.000Z配列はArray.prototype.toString() によって文字列に強制され、要素はカンマで結合されます。しかし、複数の要素を持つ配列の結果の文字列は、有効な ISO 8601 日付文字列ではないため、その解釈の動作は実装依存となります。Date() コンストラクターに、配列を渡さないでください。
console.log(new Date(["2020-06-19", "17:13"]));// Chrome では 2020-06-19T17:13:00.000Z になります。 "2020-06-19,17:13" と解釈されるからです。// Firefox では "Invalid Date" となります。仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-date-constructor> |