JavaScript

Date オブジェクト

 編集:2022.12.05 by T.A.

[Edge]。→

mdn: JavaScript の Date オブジェクトは、単一の瞬間の時刻をプラットフォームに依存しない形式で表します。Date オブジェクトは協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からの経過ミリ秒数を表す Number の値を含んでいます。

mdn: Note: TC39 は という、新しい日付/時刻の API を開発しています。これについて詳しくは を参照してください。まだ正式利用の準備はできていません。

¶省く

コンストラクター
Date()
関数。現在の日付と時刻を表す文字列を返します。new Date().toString() を実行するのと同じです。
new Date()
現在の日付と時刻を表す新しい Data オブジェクトを返します。
new Date(value)
new Date(dateString)
new Date(year, monthIndex[, day[, hours[, minutes[, seconds[, milliseconds]]]]])
指定データに従った、新しい Date オブジェクトを返します。
静的メソッド
Date.now()
UTC(協定世界時)での 1970 年 1 月 1 日 0 時 0 分 0 秒から現在までの経過時間をミリ秒を表す数値で返します。
Date.parse(dateString)
協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒から指定日時(文字列)までの経過時間をミリ秒で表す数値で返します。

mdn: Note: ブラウザーごとに動作が異なり一貫性がないため、Date.parse で文字列を解釈しないことを強く推奨します。

Date.UTC(year[, month[, day[, hour[, minute[, second[, millisecond]]]]]])
協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒から指定日時(分割指定)までの経過時間をミリ秒で表す数値で返します。
インスタンス メソッド
Date.getDate()
Date の、地方時に基づく「日」を表す整数値(1~31)を返します。
Date.getDay()
Date の、地方時に基づく「曜日」を表す数値(0~6)を返します。
Date.getFullYear()
Date の、地方時に基づく「年」を表す数値を返します。
Date.getHours()
Date の、地方時に基づく「時」を表す数値(0~23)を返します。
Date.getMilliseconds()
Date の、地方時に基づく「ミリ秒」を表す数値(0~999)で返します。
Date.getMinutes()
Date の、地方時に基づく「分」を表す数値(0~59)で返します。
Date.getMonth()
Date の、地方時に基づく「月」を表す数値(0~11)で返します。
Date.getSeconds()
Date の、地方時に基づく「秒」を表す数値(0~59)で返します。
Date.getTime()
Date の、UTC(協定世界時)での 1970 年 1 月 1 日 0 時 0 分 0 秒からの時間をミリ数で表す数値で返します。
Date.getTimezoneOffset()
ホスト システム上の現在の日付から協定世界時(UTC)までの分単位のタイムゾーン オフセットを表す数値で返します。
Date.getUTCDate()
Date の、協定世界時に基づく日付の「日」を表す数値(1~31)を返します。
Date.getUTCDay()
Date の、協定世界時に基づく日付の「曜日」を表す数値(0~6)を返します。
Date.getUTCFullYear()
Date の、協定世界時に基づく日時の「年」を表す数値を返します。
Date.getUTCHours()
Date の、協定世界時に基づく日時の「時」を表す数値(0~23)を返します。
Date.getUTCMilliseconds()
Date の、協定世界時に基づく日時の「ミリ秒」を表す数値(0~999)を返します。
Date.getUTCMinutes()
Date の、協定世界時に基づく日時の「分」を表す数値(0~59)を返します。
Date.getUTCMonth()
Date の、協定世界時に基づく日時の「月」を表す数値(0~11)を返します。
Date.getUTCSeconds()
Date の、協定世界時に基づく日時の「秒」を表す数値(0~59)を返します。
Date.getYear() 非推奨
Date の、地方時に基づく日時の「年」を表す数値(「年」から 1900 を引いた物)を返します。→getFullYear()
Date.setDate()
Date に日時の「日」として地方時に基づき設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒の数値も返します。
Date.setFullYear()
Date に日時の「年」(任意で「月」「日」)を地方時に基づき設定します。戻り値として更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値を返します。
Date.setHours()
Date に日時の「時」(任意で「分」「秒」「ミリ秒」)を地方時に基づき設定をします。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒 からミリ秒単位の数値をかえします。
Date.setMilliseconds()
Date に日時の「ミリ秒」を地方時に基づき設定します。戻り値として更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒の数値も返されます。
Date.setMinutes()
Date に日時の「分」(任意で「秒」「ミリ秒」)を地方時に基づき設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値が返されます。
Date.setMonth()
Date に日時の「月」(任意で「日」も)を地方時に基づき設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値が返されます。
Date.setSeconds()
Date に日時の「秒」(任意で「ミリ秒」も)を地方時に基づき設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値が返されます。
Date.setTime()
Date に日時を協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からの経過時間をミリ秒単位を表す数値で設定します。
Date.setUTCDate()
Date に日時の「日」を UTC 時刻に基づいて設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値を返します。
Date.setUTCFullYear()
Date に日時の「年」(任意で「月」「日」も)を協定世界時に基づき設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値を返します。
Date.setUTCHours()
Date に日時の「時」(任意で「分」「秒」「ミリ秒」も)を協定世界時に基づき設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値を返します。
Date.setUTCMilliseconds()
Date に日時の「ミリ秒」を協定世界時に基づき設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値を返します。
Date.setUTCMinutes()
Date に日時の「分」(任意で「秒」「ミリ秒」も)を協定世界時に基づき設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値を返します。
Date.setUTCMonth()
Date に日時の「月」(任意で「日」も)を協定世界時に基づき設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値を返します。
Date.setUTCSeconds()
Date に日時の「秒」(任意で「ミリ秒」も)を協定世界時に基づき設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値を返します。
Date.setYear() 非推奨
Date に日時の「年」を協定地方時に基づき設定します。戻り値として、更新後の日時の、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の数値を返します。→setFullYear()
Date.toDateString()
Date の日時を「Mon Jun 28 1993」の様な形式で文字列として返します。
Date.toISOString()
Date の日時を「2011-10-05T14:48:00.000Z」(UTC オフセット)の様な形式の文字列で返します。
Date.toJSON()
Date の JSON シリアライズ。→toISOString()

JSON.stringify() の代わりに使用してください。

Date.toGMTString() 非推奨
Date の日時をインターネット グリニッジ標準時(GMT)協定に基づく表記の文字列で返します。

代わりに toUTCString() を使用してください。

Date.toLocaleDateString()
Date の「日付」部を表す、言語特有の慣習による文字列を返します。
Date.toLocaleString()
Date の日時を言語特有の慣習によって表した文字列を返します。Object.prototype.toLocaleString() メソッドを上書きします。
Date.toLocaleTimeString()
Date の「時刻」部を表す、言語特有の慣習による文字列を返します。
Date.toString()
Date の日時を表す文字列を返します。例:「Mon Oct 05 2020 15:21:30 GMT+0900 (日本標準時)」

Object.prototype.toString() メソッドを上書きします。

Date.toTimeString()
Date の日時の「時刻」部を表す文字列を返します。例:「19:23:30 GMT+0900 (日本標準時)」
Date.toUTCString()
Date の日時を UTC タイムゾーンに基づく表記で文字列で返します。例:「Mon, 05 Oct 2020 10:23:30 GMT」
Date.valueOf()
Date オブジェクトのプリミティブ値(協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位)を数値で返します。

Object.prototype.valueOf() メソッドを上書きします。

Date オブジェクトを生成するいくつかの方法/mdn

以下の例で、JavaScript の日時を生成するいくつかの方法を示します。

Note: Date コンストラクター(または同等の Date.parse)で日付文字列を解釈することは、ブラウザーごとに動作が異なり一貫性がないため、避けるように強くすすめます。

let today = new Date();
let birthday = new Date('December 17, 1995 03:24:00');
let birthday = new Date('1995-12-17T03:24:00');
let birthday = new Date(1995, 11, 17);            // 月は 0 起点
let birthday = new Date(1995, 11, 17, 3, 24, 0);
let birthday = new Date(628021800000);            // passing epoch timestamp
年月日や時刻の取得/mdn
const date = new Date();
const [month, day, year]       = [date.getMonth(), date.getDate(), date.getFullYear()];
const [hour, minutes, seconds] = [date.getHours(), date.getMinutes(), date.getSeconds()];
2 桁の年の補完/mdn

new Date() は 2 桁の年の値に対して、古くで望ましくない一貫性のない挙動を示します。具体的には、new Date() の呼び出しに 2 桁の年の値が与えられた場合、その年の値はリテラルの年として扱われず、そのまま使用され、代わりに相対的なオフセットとして解釈されます。― ある場合には 1900 年からのオフセットとなりますが、またある場合には 2000 年からのオフセットになります。

let date = new Date(98, 1);    // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
let date = new Date(22, 1);    // Wed Feb 01 1922 00:00:00 GMT+0000 (GMT)
let date = new Date("2/1/22"); // Tue Feb 01 2022 00:00:00 GMT+0000 (GMT)

// 古い方法。常に 2 桁の年の値を 1900 からの相対値として解釈する
date.setYear(98); date.toString(); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
date.setYear(22); date.toString(); // Wed Feb 01 1922 00:00:00 GMT+0000 (GMT)

//西暦 0 年から 99 年までの間の年を生成および取得するには、setFullYear() メソッドと getFullYear() メソッドを使用してください。
// 推奨されるメソッドです。どんな値でも相対オフセットではなく、そのまま
// 年として解釈します。
date.setFullYear(98); date.getFullYear(); // 98。1998 ではない。
date.setFullYear(22); date.getFullYear(); // 22。1922ではない、2022ではない。
経過時間の計算/mdn

以下の例で、2 つの JavaScript の日付の間で経過した時間を計る方法を示します。

日(夏時間の切り替えによる)、月、年の長さが異なるため、経過時間を時、分、秒以上の単位で表現するには、いくつかの問題に対処する必要がありますので、事前によく調べて使用してください。

// Date オブジェクトを使用
let start = Date.now()

// 時間を計りたいイベントをここに置く
doSomethingForALongTime();
let end = Date.now();
var elapsed = end - start; // ミリ秒単位の経過時間
// 組み込みメソッドを使用
var start = new Date();

// 時間を計りたいイベントをここに置く
doSomethingForALongTime();
let end = new Date();
let elapsed = end.getTime() - start.getTime(); // ミリ秒単位の経過時間
// 関数をテストして返値を取得する
function printElapsedTime(fTest) {
  let nStartTime = Date.now(),
      vReturn = fTest(),
      nEndTime = Date.now();
  console.log(`Elapsed time: ${ String(nEndTime - nStartTime) } milliseconds`)
  return vReturn
}
let yourFunctionReturn = printElapsedTime(yourFunction);

Note: Web Performance API の高精度時刻機能に対応しているブラウザーでは、Performance.now() で、Date.now() よりも高信頼かつ高精度な経過時間の測定が可能です。

ECMAScript 元期からの経過秒数を取得する/mdn
let seconds = Math.floor(Date.now() / 1000);

この場合、整数だけを返すことが重要です(単純な除算ではできません)。また、実際に経過した秒数を返すことも重要です(ですから、上の例では Math.round() ではなく Math.floor() を使っています)。

DA=new Date(98, 1);  //=[object]:Sun Feb 01 1998 00:00:00 GMT+0900 (日本標準時)
D=DA.setFullYear(22);  //=[object]:Tue Feb 01 0022 00:00:00 GMT+0918 (日本標準時)
D=DA.getFullYear();    //=[number]:22

DA=new Date("2020-10-05T19:23:30.123Z");  //2020年10月5日 19時23時30秒123ミリ秒。
D=DA.toISOString();  //=[string]:2020-10-05T10:23:30.000Z

DA=new Date(2020,9,5,19,23,30,123);  //2020年10月5日 19時23時30秒123ミリ秒。
D=DA.toISOString();  //=[string]:2020-10-05T10:23:30.123Z

テスト