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
テスト