21.4.1 Date オブジェクトの概要と抽象操作の定義
以下の抽象操作 は(21.4.1.1 で定義される)時間値 に対して動作する。いずれの場合も、これらの関数への引数のいずれかが NaN であれば、結果は NaN になることに注意。
21.4.1.1 時間値と時間範囲
ECMAScript における時間計測は POSIX における時間計測に類似し、とくに先発グレゴリオ暦(proleptic Gregorian calendar)、1970 年 1 月 1 日 UTC の開始時刻(真夜中)を エポック として定義し、1 日を正確に 86,400 秒(各秒は 1000 ミリ秒)とする会計的扱いを共有する。
ECMAScript の 時間値 は Number であり、ミリ秒精度での時点を表す有限 な整数 の Number か、特定の時点を表さない NaN のいずれかである。24 × 60 × 60 × 1000 = 86,400,000 の倍数(すなわちある整数 d について 86,400,000 × d )である時間値は、エポック から d 個の完全な UTC 日を経過した UTC 日の開始時点(d が負であればエポック より前)を表す。それ以外の有限 時間値 t は、その値以下で最大のかつ前述の倍数である時間値 s を基準とし、同一の UTC 日内で s の後に (t - s ) ミリ秒経過した時点を表す。
時間値は UTC のうるう秒を考慮しない—正のうるう秒内の瞬間を表す時間値は存在せず、負のうるう秒によって UTC タイムラインから除去された瞬間を表す時間値は存在する。それでもなお、時間値の定義は区分的に UTC と整合し、うるう秒境界のみ不連続で、それ以外では差はゼロである。
Number は -9,007,199,254,740,992 から 9,007,199,254,740,992 までのすべての整数 を正確に表現できる(21.1.2.8 および 21.1.2.6 )。時間値は -8,640,000,000,000,000 から 8,640,000,000,000,000 ミリ秒というやや小さい範囲をサポートする。これは 1970 年 1 月 1 日 UTC の真夜中を基準に正確に -100,000,000 日から 100,000,000 日の範囲を与える。
1970 年 1 月 1 日 UTC の開始時刻の正確な瞬間は時間値 +0 𝔽 で表される。
Note
先発グレゴリオ暦においてうるう年は、4 で割り切れ、かつ 400 で割り切れるか 100 で割り切れない年である。
先発グレゴリオ暦の 400 年周期には 97 のうるう年が含まれる。これは平均 365.2425 日/年(31,556,952,000 ミリ秒)となる。したがって Number がミリ秒精度で正確に表現できる最大範囲は 1970 年を基準に概ね -285,426 年から 285,426 年である。本節で規定される時間値がサポートするより小さい範囲はおよそ -273,790 年から 273,790 年である。
21.4.1.2 時間関連の定数
これらの定数は以下の節のアルゴリズムで参照される。
HoursPerDay = 24
MinutesPerHour = 60
SecondsPerMinute = 60
msPerSecond = 1000 𝔽
21.4.1.3 Day ( t )
The abstract operation Day takes argument t (有限 な時間値 ) and returns 整数 の Number. t が属する日の通し日数(day number)を返す。 It performs the following steps when called:
𝔽 (floor (ℝ (t / msPerDay ))) を返す。
21.4.1.4 TimeWithinDay ( t )
The abstract operation TimeWithinDay takes argument t (有限 な時間値 ) and returns +0 𝔽 (含む)から msPerDay (含まない)までの整数 の Number. t が属する日の開始からの経過ミリ秒数を返す。 It performs the following steps when called:
𝔽 (ℝ (t ) modulo ℝ (msPerDay )) を返す。
21.4.1.5 DaysInYear ( y )
The abstract operation DaysInYear takes argument y (整数 の Number) and returns 365 𝔽 または 366 𝔽 . 年 y の日数を返す。うるう年は 366 日、それ以外は 365 日。 It performs the following steps when called:
ry を ℝ (y ) とする。(ry modulo 400) = 0 なら 366 𝔽 を返す。 (ry modulo 100) = 0 なら 365 𝔽 を返す。 (ry modulo 4) = 0 なら 366 𝔽 を返す。 365 𝔽 を返す。
21.4.1.6 DayFromYear ( y )
The abstract operation DayFromYear takes argument y (整数 の Number) and returns 整数 の Number. 年 y の初日(1 月 1 日)の day number を返す。 It performs the following steps when called:
ry を ℝ (y ) とする。注: 以降の手順で numYears1 , numYears4 , numYears100 , numYears400 はエポック から年 y の開始までに含まれる、それぞれ 1, 4, 100, 400 で割り切れる年数を表す。y がエポック より前なら負の数。 numYears1 を (ry - 1970) とする。numYears4 を floor ((ry - 1969) / 4) とする。numYears100 を floor ((ry - 1901) / 100) とする。numYears400 を floor ((ry - 1601) / 400) とする。𝔽 (365 × numYears1 + numYears4 - numYears100 + numYears400 ) を返す。
21.4.1.7 TimeFromYear ( y )
The abstract operation TimeFromYear takes argument y (整数 の Number) and returns 時間値 . 年 y の開始の時間値 を返す。 It performs the following steps when called:
msPerDay × DayFromYear (y ) を返す。
21.4.1.8 YearFromTime ( t )
The abstract operation YearFromTime takes argument t (有限 な時間値 ) and returns 整数 の Number. t が属する年を返す。 It performs the following steps when called:
TimeFromYear (y ) ≤ t を満たす最大の整数 Number y (+∞ に最も近い)を返す。
21.4.1.9 DayWithinYear ( t )
The abstract operation DayWithinYear takes argument t (有限 な時間値 ) and returns +0 𝔽 から 365 𝔽 まで(両端含む)の整数 の Number. It performs the following steps when called:
Day (t ) - DayFromYear (YearFromTime (t )) を返す。
21.4.1.10 InLeapYear ( t )
The abstract operation InLeapYear takes argument t (有限 な時間値 ) and returns +0 𝔽 または 1 𝔽 . t がうるう年内なら 1 𝔽 、そうでなければ +0 𝔽 を返す。 It performs the following steps when called:
DaysInYear (YearFromTime (t )) が 366 𝔽 なら 1 𝔽 を返し、そうでなければ +0 𝔽 を返す。
21.4.1.11 MonthFromTime ( t )
The abstract operation MonthFromTime takes argument t (有限 な時間値 ) and returns +0 𝔽 から 11 𝔽 まで(両端含む)の整数 の Number. t が属する月を識別する Number を返す。+0 𝔽 は 1 月、1 𝔽 は 2 月、2 𝔽 は 3 月、3 𝔽 は 4 月、4 𝔽 は 5 月、5 𝔽 は 6 月、6 𝔽 は 7 月、7 𝔽 は 8 月、8 𝔽 は 9 月、9 𝔽 は 10 月、10 𝔽 は 11 月、11 𝔽 は 12 月を表す。MonthFromTime(+0 𝔽 ) = +0 𝔽 は 1970 年 1 月 1 日(木曜日)に対応する。 It performs the following steps when called:
inLeapYear を InLeapYear (t ) とする。dayWithinYear を DayWithinYear (t ) とする。dayWithinYear < 31 𝔽 なら +0 𝔽 を返す。dayWithinYear < 59 𝔽 + inLeapYear なら 1 𝔽 を返す。dayWithinYear < 90 𝔽 + inLeapYear なら 2 𝔽 を返す。dayWithinYear < 120 𝔽 + inLeapYear なら 3 𝔽 を返す。dayWithinYear < 151 𝔽 + inLeapYear なら 4 𝔽 を返す。dayWithinYear < 181 𝔽 + inLeapYear なら 5 𝔽 を返す。dayWithinYear < 212 𝔽 + inLeapYear なら 6 𝔽 を返す。dayWithinYear < 243 𝔽 + inLeapYear なら 7 𝔽 を返す。dayWithinYear < 273 𝔽 + inLeapYear なら 8 𝔽 を返す。dayWithinYear < 304 𝔽 + inLeapYear なら 9 𝔽 を返す。dayWithinYear < 334 𝔽 + inLeapYear なら 10 𝔽 を返す。事前条件: dayWithinYear < 365 𝔽 + inLeapYear 。 11 𝔽 を返す。
21.4.1.12 DateFromTime ( t )
The abstract operation DateFromTime takes argument t (有限 な時間値 ) and returns 1 𝔽 から 31 𝔽 まで(両端含む)の整数 の Number. t が属する月の日(day of month)を返す。 It performs the following steps when called:
inLeapYear を InLeapYear (t ) とする。dayWithinYear を DayWithinYear (t ) とする。month を MonthFromTime (t ) とする。month が +0 𝔽 なら dayWithinYear + 1 𝔽 を返す。month が 1 𝔽 なら dayWithinYear - 30 𝔽 を返す。month が 2 𝔽 なら dayWithinYear - 58 𝔽 - inLeapYear を返す。month が 3 𝔽 なら dayWithinYear - 89 𝔽 - inLeapYear を返す。month が 4 𝔽 なら dayWithinYear - 119 𝔽 - inLeapYear を返す。month が 5 𝔽 なら dayWithinYear - 150 𝔽 - inLeapYear を返す。month が 6 𝔽 なら dayWithinYear - 180 𝔽 - inLeapYear を返す。month が 7 𝔽 なら dayWithinYear - 211 𝔽 - inLeapYear を返す。month が 8 𝔽 なら dayWithinYear - 242 𝔽 - inLeapYear を返す。month が 9 𝔽 なら dayWithinYear - 272 𝔽 - inLeapYear を返す。month が 10 𝔽 なら dayWithinYear - 303 𝔽 - inLeapYear を返す。事前条件: month は 11 𝔽 。 dayWithinYear - 333 𝔽 - inLeapYear を返す。
21.4.1.13 WeekDay ( t )
The abstract operation WeekDay takes argument t (有限 な時間値 ) and returns +0 𝔽 から 6 𝔽 まで(両端含む)の整数 の Number. t が属する曜日を識別する Number を返す。+0 𝔽 は日曜日、1 𝔽 は月曜日、2 𝔽 は火曜日、3 𝔽 は水曜日、4 𝔽 は木曜日、5 𝔽 は金曜日、6 𝔽 は土曜日。WeekDay(+0 𝔽 ) = 4 𝔽 は 1970 年 1 月 1 日(木曜日)に対応する。 It performs the following steps when called:
𝔽 (ℝ (Day (t ) + 4 𝔽 ) modulo 7) を返す。
21.4.1.14 HourFromTime ( t )
The abstract operation HourFromTime takes argument t (有限 な時間値 ) and returns +0 𝔽 から 23 𝔽 まで(両端含む)の整数 の Number. t が属する日の時(hour)を返す。 It performs the following steps when called:
𝔽 (floor (ℝ (t / msPerHour )) modulo HoursPerDay ) を返す。
21.4.1.15 MinFromTime ( t )
The abstract operation MinFromTime takes argument t (有限 な時間値 ) and returns +0 𝔽 から 59 𝔽 まで(両端含む)の整数 の Number. t が属する時間の分(minute)を返す。 It performs the following steps when called:
𝔽 (floor (ℝ (t / msPerMinute )) modulo MinutesPerHour ) を返す。
21.4.1.16 SecFromTime ( t )
The abstract operation SecFromTime takes argument t (有限 な時間値 ) and returns +0 𝔽 から 59 𝔽 まで(両端含む)の整数 の Number. t が属する分の秒(second)を返す。 It performs the following steps when called:
𝔽 (floor (ℝ (t / msPerSecond )) modulo SecondsPerMinute ) を返す。
21.4.1.17 msFromTime ( t )
The abstract operation msFromTime takes argument t (有限 な時間値 ) and returns +0 𝔽 から 999 𝔽 まで(両端含む)の整数 の Number. t が属する秒のミリ秒(millisecond)を返す。 It performs the following steps when called:
𝔽 (ℝ (t ) modulo ℝ (msPerSecond )) を返す。
21.4.1.18 GetUTCEpochNanoseconds ( year , month , day , hour , minute , second , millisecond , microsecond , nanosecond )
The abstract operation GetUTCEpochNanoseconds takes arguments year (整数 ), month (1 から 12(両端含む)の整数 ), day (1 から 31(両端含む)の整数 ), hour (0 から 23(両端含む)の整数 ), minute (0 から 59(両端含む)の整数 ), second (0 から 59(両端含む)の整数 ), millisecond (0 から 999(両端含む)の整数 ), microsecond (0 から 999(両端含む)の整数 ), and nanosecond (0 から 999(両端含む)の整数 ) and returns BigInt. 返される値は、与えられた ISO 8601 暦日と UTC の壁時計時刻に対応する、エポック からのナノ秒数を表す。 It performs the following steps when called:
date を MakeDay (𝔽 (year ), 𝔽 (month - 1), 𝔽 (day )) とする。time を MakeTime (𝔽 (hour ), 𝔽 (minute ), 𝔽 (second ), 𝔽 (millisecond )) とする。ms を MakeDate (date , time ) とする。事前条件: ms は整数 の Number。 ℤ (ℝ (ms ) × 106 + microsecond × 103 + nanosecond ) を返す。
21.4.1.19 タイムゾーン識別子
ECMAScript におけるタイムゾーンは タイムゾーン識別子 により表され、これは 0x0000 から 0x007F(両端含む)のコードユニットのみから構成される文字列である。
ECMAScript 実装がサポートするタイムゾーンは、AvailableNamedTimeZoneIdentifiers が返す Time Zone Identifier Record の [[Identifier]] フィールドで表される 利用可能な名前付きタイムゾーン 、または IsTimeZoneOffsetString が true を返す文字列で表される オフセットタイムゾーン のいずれかであり得る。
一次タイムゾーン識別子 は、ある利用可能な名前付きタイムゾーンの推奨識別子である。
非一次タイムゾーン識別子 は、一次タイムゾーン識別子ではない利用可能な名前付きタイムゾーンの識別子である。
利用可能な名前付きタイムゾーン識別子 は一次または非一次のいずれかである。
各利用可能な名前付きタイムゾーン識別子は厳密に 1 つの名前付きタイムゾーンに対応し、
各利用可能な名前付きタイムゾーンは厳密に 1 つの一次タイムゾーン識別子と 0 個以上の非一次タイムゾーン識別子に対応する。
ECMAScript 実装は識別子 "UTC" を持つ利用可能な名前付きタイムゾーンをサポートしなければならず、これは UTC タイムゾーンの一次タイムゾーン識別子でなければならない。
さらに実装は他の任意個数の利用可能な名前付きタイムゾーンをサポートしてもよい。
ECMA-402 Internationalization API 仕様で記述されるタイムゾーン要件に従う実装は タイムゾーン対応 (time zone aware) と呼ばれる。
タイムゾーン対応実装は IANA Time Zone Database の Zone 名および Link 名に対応する利用可能な名前付きタイムゾーンをサポートし、かつそれらのみをサポートしなければならない。
タイムゾーン対応実装では、一次タイムゾーン識別子は Zone 名であり、非一次タイムゾーン識別子は Link 名である(ただし ECMA-402 仕様で規定される AvailableNamedTimeZoneIdentifiers により特に上書きされる場合を除く)。
IANA Time Zone Database 全体をサポートしない実装であっても、タイムゾーンを表す識別子として IANA Time Zone Database の名前を用いることが推奨される。
21.4.1.20 GetNamedTimeZoneEpochNanoseconds ( timeZoneIdentifier , year , month , day , hour , minute , second , millisecond , microsecond , nanosecond )
The implementation-defined abstract operation GetNamedTimeZoneEpochNanoseconds takes arguments timeZoneIdentifier (String), year (整数 ), month (1 から 12(両端含む)の整数 ), day (1 から 31(両端含む)の整数 ), hour (0 から 23(両端含む)の整数 ), minute (0 から 59(両端含む)の整数 ), second (0 から 59(両端含む)の整数 ), millisecond (0 から 999(両端含む)の整数 ), microsecond (0 から 999(両端含む)の整数 ), and nanosecond (0 から 999(両端含む)の整数 ) and returns BigInt の List .
返される List の各要素は、timeZoneIdentifier で識別される名前付きタイムゾーン内で、与えられた ISO 8601 暦日と壁時計時刻に対応する、エポック からのナノ秒数を表す。
入力が負のタイムゾーン遷移(例: 夏時間終了やルール変更によるオフセット減少)により複数回出現するローカル時刻を表す場合、返される List は複数要素を持ち、数値昇順で並ぶ。
入力が正のタイムゾーン遷移(例: 夏時間開始やルール変更によるオフセット増加)でスキップされるローカル時刻を表す場合、返される List は空となる。
それ以外の場合、返される List は 1 要素を持つ。
ローカルの政治的ルールをいかなるタイムゾーンについても含まない ECMAScript 実装で利用される GetNamedTimeZoneEpochNanoseconds のデフォルト実装は、呼び出されたとき次を行う:
事前条件: timeZoneIdentifier は "UTC" 。 epochNanoseconds を GetUTCEpochNanoseconds (year , month , day , hour , minute , second , millisecond , microsecond , nanosecond ) とする。« epochNanoseconds » を返す。
Note
タイムゾーン対応実装(および他のすべての実装にも推奨)は IANA Time Zone Database https://www.iana.org/time-zones/ のタイムゾーン情報を使用することが要求される。
2017 年 11 月 5 日の America/New_York における午前 1:30 は 2 回繰り返されるため、GetNamedTimeZoneEpochNanoseconds("America/New_York" , 2017, 11, 5, 1, 30, 0, 0, 0, 0) は長さ 2 の List を返し、最初の要素は 05:30 UTC(UTC-04:00 の米国東部夏時間の 01:30)を、第二の要素は 06:30 UTC(UTC-05:00 の米国東部標準時の 01:30)を表す。
2017 年 3 月 12 日の America/New_York における午前 2:30 は存在しないので、GetNamedTimeZoneEpochNanoseconds("America/New_York" , 2017, 3, 12, 2, 30, 0, 0, 0, 0) は空の List を返す。
21.4.1.21 GetNamedTimeZoneOffsetNanoseconds ( timeZoneIdentifier , epochNanoseconds )
The implementation-defined abstract operation GetNamedTimeZoneOffsetNanoseconds takes arguments timeZoneIdentifier (String) and epochNanoseconds (BigInt) and returns 整数 .
返される整数 は、timeZoneIdentifier で識別される名前付きタイムゾーンの、エポック からの epochNanoseconds が表す瞬間における UTC からのオフセット(いずれもナノ秒)を表す。
ローカルの政治的ルールをいかなるタイムゾーンについても含まない ECMAScript 実装で利用される GetNamedTimeZoneOffsetNanoseconds のデフォルト実装は、呼び出されたとき次を行う:
事前条件: timeZoneIdentifier は "UTC" 。 0 を返す。
Note
21.4.1.22 タイムゾーン識別子レコード
タイムゾーン識別子レコード は利用可能な名前付きタイムゾーン識別子 とその対応する一次タイムゾーン識別子 を記述するための Record である。
タイムゾーン識別子レコードは Table 62 に掲げるフィールドを持つ。
Table 62: タイムゾーン識別子レコード のフィールド
Note
[[Identifier]] が一次タイムゾーン識別子 である場合、[[Identifier]] は [[PrimaryIdentifier]] と等しい。
21.4.1.23 AvailableNamedTimeZoneIdentifiers ( )
The implementation-defined abstract operation AvailableNamedTimeZoneIdentifiers takes no arguments and returns Time Zone Identifier Record の List .
戻り値はこの実装内のすべての利用可能な名前付きタイムゾーン識別子 と、それぞれに対応する一次タイムゾーン識別子 を記述する。
List は各 Time Zone Identifier Record の [[Identifier]] フィールド順に並ぶ。
タイムゾーン対応実装(ECMA-402 Internationalization API を実装するすべての実装を含む)は AvailableNamedTimeZoneIdentifiers 抽象操作 を ECMA-402 仕様に従って実装しなければならない。
タイムゾーン対応でない実装では、AvailableNamedTimeZoneIdentifiers は呼び出されたとき以下を行う:
実装がいかなるタイムゾーンについてもローカルの政治的ルールを含まないなら« Time Zone Identifier Record { [[Identifier]] : "UTC" , [[PrimaryIdentifier]] : "UTC" } » を返す。 identifiers を、重複しない利用可能な名前付きタイムゾーン識別子 の List (辞書式コードユニット順 にソート)とする。result を新しい空の List とする。identifiers の各要素 identifier について、primary を identifier とする。identifier がこの実装における非一次タイムゾーン識別子 でありかつ identifier が "UTC" でないならprimary を identifier に関連付けられた一次タイムゾーン識別子 に設定する。注: 実装は一次タイムゾーン識別子 を得るために identifier を反復的に解決する必要があるかもしれない。 record を Time Zone Identifier Record { [[Identifier]] : identifier , [[PrimaryIdentifier]] : primary } とする。record を result に追加する。事前条件: result は [[Identifier]] が "UTC" で [[PrimaryIdentifier]] が "UTC" である Time Zone Identifier Record r を含む。 result を返す。
21.4.1.24 SystemTimeZoneIdentifier ( )
The implementation-defined abstract operation SystemTimeZoneIdentifier takes no arguments and returns String.
ホスト環境 の現在のタイムゾーンを表す文字列を返す。それは IsTimeZoneOffsetString が true を返す UTC オフセットを表す文字列、または一次タイムゾーン識別子 のいずれかである。
It performs the following steps when called:
実装が UTC タイムゾーンのみをサポートするなら "UTC" を返す。 systemTimeZoneString をホスト環境 の現在のタイムゾーンを表す文字列(一次タイムゾーン識別子 またはオフセットタイムゾーン 識別子)とする。systemTimeZoneString を返す。
Note
Date オブジェクトのメソッドで一般的に提供される機能レベルを確実にするため、SystemTimeZoneIdentifier はホスト環境 のタイムゾーン設定に対応する IANA タイムゾーン名(存在するなら)を返すことが推奨される。
GetNamedTimeZoneEpochNanoseconds と GetNamedTimeZoneOffsetNanoseconds はそのタイムゾーンの標準時および夏時間のローカル政治的ルールを反映しなければならない(存在する場合)。
例えば、ホスト環境 がユーザが US Eastern Time を選択したシステム上のブラウザである場合、SystemTimeZoneIdentifier は "America/New_York" を返す。
21.4.1.25 LocalTime ( t )
The abstract operation LocalTime takes argument t (有限 な時間値 ) and returns 整数 の Number.
t を UTC からローカル時刻に変換する。
t に有効な標準時と夏時間のローカル政治的ルールを、この節で規定される方法で用いて結果を決定するべきである。
It performs the following steps when called:
systemTimeZoneIdentifier を SystemTimeZoneIdentifier () とする。IsTimeZoneOffsetString (systemTimeZoneIdentifier ) が true ならoffsetNs を ParseTimeZoneOffsetString (systemTimeZoneIdentifier ) とする。そうでなければ、offsetNs を GetNamedTimeZoneOffsetNanoseconds (systemTimeZoneIdentifier , ℤ (ℝ (t ) × 106 )) とする。 offsetMs を truncate (offsetNs / 106 ) とする。t + 𝔽 (offsetMs ) を返す。
Note 1
実装内にローカル時刻 t の政治的ルールが利用可能でない場合、SystemTimeZoneIdentifier が "UTC" を返し GetNamedTimeZoneOffsetNanoseconds が 0 を返すため、結果は t と同じになる。
Note 2
タイムゾーン対応実装(および他のすべての実装にも推奨)は IANA Time Zone Database https://www.iana.org/time-zones/ のタイムゾーン情報を使用することが要求される。
Note 3
負のタイムゾーン遷移で時刻が繰り返されるとき(例: 夏時間終了やオフセット減少)、2 つの異なる入力時間値 t UTC が同じローカル時刻 tlocal に変換される。
LocalTime(UTC (t local )) は常に t local と等しいとは限らない。同様に UTC (LocalTime(t UTC )) も常に t UTC と等しいとは限らない。
21.4.1.26 UTC ( t )
The abstract operation UTC takes argument t (Number) and returns 時間値 .
t をローカル時刻から UTC の時間値 に変換する。
t に有効な標準時と夏時間のローカル政治的ルールを、この節で規定される方法で用いて結果を決定するべきである。
It performs the following steps when called:
t が有限 でなければ NaN を返す。systemTimeZoneIdentifier を SystemTimeZoneIdentifier () とする。IsTimeZoneOffsetString (systemTimeZoneIdentifier ) が true ならoffsetNs を ParseTimeZoneOffsetString (systemTimeZoneIdentifier ) とする。そうでなければ、possibleInstants を GetNamedTimeZoneEpochNanoseconds (systemTimeZoneIdentifier , ℝ (YearFromTime (t )), ℝ (MonthFromTime (t )) + 1, ℝ (DateFromTime (t )), ℝ (HourFromTime (t )), ℝ (MinFromTime (t )), ℝ (SecFromTime (t )), ℝ (msFromTime (t )), 0, 0) とする。注: 以下の手順は t が負のタイムゾーン遷移(例: 夏時間終了やオフセット減少)で複数回繰り返されるローカル時刻、または正のタイムゾーン遷移(例: 夏時間開始やオフセット増加)でスキップされるローカル時刻を表すとき、t が遷移前のタイムゾーンオフセットを用いて解釈されることを保証する。 possibleInstants が空でなければdisambiguatedInstant を possibleInstants [0] とする。そうでなければ、注: t は正のタイムゾーン遷移(例: 夏時間開始やオフセット増加)でスキップされたローカル時刻を表す。 possibleInstantsBefore を GetNamedTimeZoneEpochNanoseconds (systemTimeZoneIdentifier , ℝ (YearFromTime (tBefore )), ℝ (MonthFromTime (tBefore )) + 1, ℝ (DateFromTime (tBefore )), ℝ (HourFromTime (tBefore )), ℝ (MinFromTime (tBefore )), ℝ (SecFromTime (tBefore )), ℝ (msFromTime (tBefore )), 0, 0) とし、ここで tBefore は possibleInstantsBefore が空でない最大の整数 Number かつ t より小さいもの(すなわち遷移直前の最後のローカル時刻)である。disambiguatedInstant を possibleInstantsBefore の最後の要素とする。 offsetNs を GetNamedTimeZoneOffsetNanoseconds (systemTimeZoneIdentifier , disambiguatedInstant ) とする。 offsetMs を truncate (offsetNs / 106 ) とする。t - 𝔽 (offsetMs ) を返す。
入力 t は名目上時間値 だが、任意の Number 値でよい。
アルゴリズムは t を時間値 範囲に制限してはならず、これにより時間値 範囲の境界に対応する入力がローカル UTC オフセットに関わらずサポート可能となる。
例えば最大時間値 は 8.64 × 1015 で "+275760-09-13T00:00:00Z" に対応する。
その瞬間にローカルタイムゾーンオフセットが UTC より 1 時間進んでいる環境では、より大きい入力 8.64 × 1015 + 3.6 × 106 で表され、"+275760-09-13T01:00:00+01:00" に対応する。
実装内にローカル時刻 t の政治的ルールが利用可能でない場合、SystemTimeZoneIdentifier が "UTC" を返し GetNamedTimeZoneOffsetNanoseconds が 0 を返すため、結果は t と同じになる。
Note 1
タイムゾーン対応実装(および他のすべての実装にも推奨)は IANA Time Zone Database https://www.iana.org/time-zones/ のタイムゾーン情報を使用することが要求される。
2017 年 11 月 5 日の America/New_York の午前 1:30 は 2 回繰り返される(秋の戻し)が、UTC(TimeClip (MakeDate (MakeDay (2017, 10, 5), MakeTime (1, 30, 0, 0)))) では offsetMs の値は -4 × msPerHour となり、1:30 AM UTC-04 として解釈されなければならない。
2017 年 3 月 12 日の America/New_York の午前 2:30 は存在しないが、2:30 AM UTC-05(3:30 AM UTC-04 と同等)として解釈されなければならない。
UTC(TimeClip (MakeDate (MakeDay (2017, 2, 12), MakeTime (2, 30, 0, 0)))) において offsetMs の値は -5 × msPerHour である。
Note 2
UTC(LocalTime (t UTC )) は常に t UTC と等しいとは限らない。同様に LocalTime (UTC(t local )) も常に t local と等しいとは限らない。
21.4.1.27 MakeTime ( hour , min , sec , ms )
The abstract operation MakeTime takes arguments hour (Number), min (Number), sec (Number), and ms (Number) and returns Number. ミリ秒数を計算する。 It performs the following steps when called:
hour が有限 でない、min が有限 でない、sec が有限 でない、または ms が有限 でないなら NaN を返す。h を 𝔽 (! ToIntegerOrInfinity (hour )) とする。m を 𝔽 (! ToIntegerOrInfinity (min )) とする。s を 𝔽 (! ToIntegerOrInfinity (sec )) とする。milli を 𝔽 (! ToIntegerOrInfinity (ms )) とする。((h × msPerHour + m × msPerMinute ) + s × msPerSecond ) + milli を返す。
Note
MakeTime の算術は浮動小数点算術であり結合的でないため、演算は正しい順序で行われなければならない。
21.4.1.28 MakeDay ( year , month , date )
The abstract operation MakeDay takes arguments year (Number), month (Number), and date (Number) and returns Number. 日数を計算する。 It performs the following steps when called:
year が有限 でない、month が有限 でない、または date が有限 でないなら NaN を返す。y を 𝔽 (! ToIntegerOrInfinity (year )) とする。m を 𝔽 (! ToIntegerOrInfinity (month )) とする。dt を 𝔽 (! ToIntegerOrInfinity (date )) とする。ym を y + 𝔽 (floor (ℝ (m ) / 12)) とする。ym が有限 でなければ NaN を返す。mn を 𝔽 (ℝ (m ) modulo 12) とする。YearFromTime (t ) が ym 、MonthFromTime (t ) が mn 、DateFromTime (t ) が 1 𝔽 である有限 の時間値 t を見つける。ただし(引数が範囲外であるなどにより)不可能なら NaN を返す。Day (t ) + dt - 1 𝔽 を返す。
21.4.1.29 MakeDate ( day , time )
The abstract operation MakeDate takes arguments day (Number) and time (Number) and returns Number. ミリ秒数を計算する。 It performs the following steps when called:
day が有限 でないまたは time が有限 でないなら NaN を返す。tv を day × msPerDay + time とする。tv が有限 でないなら NaN を返す。tv を返す。
21.4.1.30 MakeFullYear ( year )
The abstract operation MakeFullYear takes argument year (Number) and returns 整数 の Number または NaN . year の整数 部分に関連付けられた完全な年(full year)を返す。0 から 99(両端含む)の値は 1900 年の開始からの年数として解釈する。先発グレゴリオ暦との整合のため、「full year」は年 0(紀元前 1 年)の開始からの完了した年の符号付き個数と定義される。 It performs the following steps when called:
year が NaN なら NaN を返す。truncated を ! ToIntegerOrInfinity (year ) とする。truncated が 0 から 99(両端含む)なら 1900 𝔽 + 𝔽 (truncated ) を返す。𝔽 (truncated ) を返す。
21.4.1.31 TimeClip ( time )
The abstract operation TimeClip takes argument time (Number) and returns Number. ミリ秒数を計算する。 It performs the following steps when called:
time が有限 でなければ NaN を返す。abs (ℝ (time )) > 8.64 × 1015 なら NaN を返す。𝔽 (! ToIntegerOrInfinity (time )) を返す。
21.4.1.32 日時文字列フォーマット
ECMAScript は ISO 8601 暦日の拡張形式を単純化した日時の文字列交換フォーマットを定義する。形式は次のとおり: YYYY-MM-DDTHH:mm:ss.sssZ
要素の意味は以下のとおり:
YYYY
0000 から 9999 までの 4 桁の 10 進数、または "+" または "-" に続く 6 桁の 10 進数による 拡張年 としての先発グレゴリオ暦の年。
-
"-" (ハイフン)が文字列中に 2 回字義通りに現れる。
MM
01(1 月)から 12(12 月)までの 2 桁の 10 進数としての月。
DD
01 から 31 までの 2 桁の 10 進数としての月の日。
T
時刻要素の開始を示すために "T" が文字列中に字義通りに現れる。
HH
深夜から経過した完全な時数を 00 から 24 までの 2 桁の 10 進数で表したもの。
:
":" (コロン)が文字列中に 2 回字義通りに現れる。
mm
時の開始から経過した完全な分数を 00 から 59 までの 2 桁の 10 進数で表したもの。
ss
分の開始から経過した完全な秒数を 00 から 59 までの 2 桁の 10 進数で表したもの。
.
"." (ドット)が文字列中に字義通りに現れる。
sss
秒の開始から経過した完全なミリ秒数を 3 桁の 10 進数で表したもの。
Z
UTC オフセット表現。"Z" (UTC でオフセットなし)または "+" もしくは "-" に続く時刻表現 HH:mm
(タイムゾーンオフセット文字列形式 の部分集合で、UTC より進んでいる/遅れているローカル時刻を示す)
この形式には日付のみの形式も含まれる:
YYYY
YYYY-MM
YYYY-MM-DD
また、上記の日付のみの形式に続けて以下のいずれかの時刻形式(オプションの UTC オフセット表現付き)を直後に置いた “日時 (date-time)” 形式も含まれる:
THH:mm
THH:mm:ss
THH:mm:ss.sss
範囲外または不適合な要素を含む文字列はこの形式の有効なインスタンスではない。
Note 1
各日が深夜で始まり終わるため、2 つの深夜を区別するために 00:00
と 24:00
の 2 つの表記が利用可能である。これは 1995-02-04T24:00
と 1995-02-05T00:00
の 2 つの表記が正確に同一の時点を指すことを意味する。この後者形式を「暦日終端」と解釈することは ISO 8601 と整合している(同仕様では時間間隔の記述に予約され、単一時点の表現には許容されないが)。
Note 2
CET や EST などの市民タイムゾーン略称を規定する国際標準は存在せず、同じ略称が別の非常に異なるタイムゾーンに使われることもある。このため ISO 8601 と本形式はいずれもタイムゾーンオフセットの数値表現を規定する。
21.4.1.32.1 拡張年 (Expanded Years)
1 January 1970(21.4.1.1 )から約 273,790 年前後の時間値 範囲全体をカバーするには 0 より前または 9999 より後の年を表現する必要がある。ISO 8601 は年表現の拡張を許容するが、情報交換の当事者間の合意が必要である。単純化された ECMAScript 形式では、そのような拡張年表現は 6 桁であり、常に + または - の符号を前置する。年 0 は正とみなされ + 符号を前置しなければならない。年 0 を -000000 と表すことは無効である。拡張年が時間値 の範囲外の時点を表す 日時文字列形式 にマッチする文字列は Date.parse
によって認識不能として扱われ、実装依存の挙動やヒューリスティクスにフォールバックせず NaN を返す。
Note
拡張年を用いた日時(time values )の例:
-271821-04-20T00:00:00Z
271822 B.C.
-000001-01-01T00:00:00Z
2 B.C.
+000000-01-01T00:00:00Z
1 B.C.
+000001-01-01T00:00:00Z
1 A.D.
+001970-01-01T00:00:00Z
1970 A.D.
+002009-12-15T00:00:00Z
2009 A.D.
+275760-09-13T00:00:00Z
275760 A.D.
21.4.1.33 タイムゾーンオフセット文字列形式
ECMAScript は ISO 8601 に由来する UTC オフセットの文字列交換形式を定義する。
形式は以下の文法で記述される。
構文
UTCOffset :::
ASCIISign
Hour
ASCIISign
Hour
HourSubcomponents [+Extended]
ASCIISign
Hour
HourSubcomponents [~Extended]
ASCIISign ::: one of + -
Hour :::
0
DecimalDigit
1
DecimalDigit
20
21
22
23
HourSubcomponents [Extended] :::
TimeSeparator [?Extended]
MinuteSecond
TimeSeparator [?Extended]
MinuteSecond
TimeSeparator [?Extended]
MinuteSecond
TemporalDecimalFraction opt
TimeSeparator [Extended] ::: [+Extended]
:
[~Extended]
[empty]
MinuteSecond :::
0
DecimalDigit
1
DecimalDigit
2
DecimalDigit
3
DecimalDigit
4
DecimalDigit
5
DecimalDigit
TemporalDecimalFraction :::
TemporalDecimalSeparator
DecimalDigit
TemporalDecimalSeparator
DecimalDigit
DecimalDigit
TemporalDecimalSeparator
DecimalDigit
DecimalDigit
DecimalDigit
TemporalDecimalSeparator
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
TemporalDecimalSeparator
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
TemporalDecimalSeparator
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
TemporalDecimalSeparator
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
TemporalDecimalSeparator
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
TemporalDecimalSeparator
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
DecimalDigit
TemporalDecimalSeparator ::: one of . ,
21.4.1.33.1 IsTimeZoneOffsetString ( offsetString )
The abstract operation IsTimeZoneOffsetString takes argument offsetString (String) and returns Boolean. 戻り値は offsetString が UTCOffset の文法に適合するかどうかを示す。 It performs the following steps when called:
parseResult を ParseText(offsetString , UTCOffset ) とする。parseResult がエラーの List なら false を返す。true を返す。
21.4.1.33.2 ParseTimeZoneOffsetString ( offsetString )
The abstract operation ParseTimeZoneOffsetString takes argument offsetString (String) and returns 整数 . 戻り値は offsetString に対応する UTC オフセット(ナノ秒数)である。 It performs the following steps when called:
parseResult を ParseText(offsetString , UTCOffset ) とする。事前条件: parseResult はエラーの List ではない。 事前条件: parseResult は ASCIISign の構文ノード を含む。 parsedSign を parseResult に含まれる ASCIISign 構文ノード がマッチしたソーステキストとする。parsedSign が単一コードポイント U+002D (HYPHEN-MINUS) ならsign を -1 とする。そうでなければsign を 1 とする。 注: 以下の StringToNumber の適用は、各解析値が十分に短い 10 進数字列であることが保証されるため精度を失わない。 事前条件: parseResult は Hour 構文ノード を含む。 parsedHours を parseResult に含まれる Hour 構文ノード がマッチしたソーステキストとする。hours を ℝ (StringToNumber (CodePointsToString(parsedHours ))) とする。parseResult が MinuteSecond 構文ノード を含まないならminutes を 0 とする。そうでなければparsedMinutes を parseResult に含まれる最初の MinuteSecond 構文ノード がマッチしたソーステキストとする。minutes を ℝ (StringToNumber (CodePointsToString(parsedMinutes ))) とする。 parseResult が 2 つの MinuteSecond 構文ノード を含まないならseconds を 0 とする。そうでなければparsedSeconds を parseResult に含まれる 2 番目の MinuteSecond 構文ノード がマッチしたソーステキストとする。seconds を ℝ (StringToNumber (CodePointsToString(parsedSeconds ))) とする。 parseResult が TemporalDecimalFraction 構文ノード を含まないならnanoseconds を 0 とする。そうでなければparsedFraction を parseResult に含まれる TemporalDecimalFraction 構文ノード がマッチしたソーステキストとする。fraction を CodePointsToString(parsedFraction ) と "000000000" の文字列連結 とする。nanosecondsString を fraction の先頭から 10 文字の部分文字列 とする。nanoseconds を ℝ (StringToNumber (nanosecondsString )) とする。 sign × (((hours × 60 + minutes ) × 60 + seconds ) × 109 + nanoseconds ) を返す。
21.4.4 Date プロトタイプオブジェクトのプロパティ
Date プロトタイプオブジェクト は:
%Date.prototype% である。
それ自体が通常のオブジェクトである。
Date インスタンスではなく [[DateValue]] 内部スロットを持たない。
[[Prototype]] 内部スロットの値は %Object.prototype% である。
特別に定義されていない限り、以下で定義される Date プロトタイプオブジェクトのメソッドはジェネリックではなく、this に渡される値は初期化済みの [[DateValue]] 内部スロットを持つオブジェクトでなければならない。
21.4.4.1 Date.prototype.constructor
Date.prototype.constructor
の初期値は %Date% である。
21.4.4.2 Date.prototype.getDate ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。DateFromTime (LocalTime (t )) を返す。
21.4.4.3 Date.prototype.getDay ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。WeekDay (LocalTime (t )) を返す。
21.4.4.4 Date.prototype.getFullYear ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。YearFromTime (LocalTime (t )) を返す。
21.4.4.5 Date.prototype.getHours ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。HourFromTime (LocalTime (t )) を返す。
21.4.4.6 Date.prototype.getMilliseconds ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。msFromTime (LocalTime (t )) を返す。
21.4.4.7 Date.prototype.getMinutes ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。MinFromTime (LocalTime (t )) を返す。
21.4.4.8 Date.prototype.getMonth ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。MonthFromTime (LocalTime (t )) を返す。
21.4.4.9 Date.prototype.getSeconds ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。SecFromTime (LocalTime (t )) を返す。
21.4.4.10 Date.prototype.getTime ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 dateObject .[[DateValue]] を返す。
21.4.4.11 Date.prototype.getTimezoneOffset ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。(t - LocalTime (t )) / msPerMinute を返す。
21.4.4.12 Date.prototype.getUTCDate ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。DateFromTime (t ) を返す。
21.4.4.13 Date.prototype.getUTCDay ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。WeekDay (t ) を返す。
21.4.4.14 Date.prototype.getUTCFullYear ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。YearFromTime (t ) を返す。
21.4.4.15 Date.prototype.getUTCHours ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。HourFromTime (t ) を返す。
21.4.4.16 Date.prototype.getUTCMilliseconds ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。msFromTime (t ) を返す。
21.4.4.17 Date.prototype.getUTCMinutes ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。MinFromTime (t ) を返す。
21.4.4.18 Date.prototype.getUTCMonth ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。MonthFromTime (t ) を返す。
21.4.4.19 Date.prototype.getUTCSeconds ( )
このメソッドは呼び出されると、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら NaN を返す。SecFromTime (t ) を返す。
21.4.4.20 Date.prototype.setDate ( date )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。dt を ? ToNumber (date ) とする。t が NaN なら、NaN を返す。t を LocalTime (t ) に設定する。newDate を MakeDate (MakeDay (YearFromTime (t ), MonthFromTime (t ), dt ), TimeWithinDay (t )) とする。u を TimeClip (UTC (newDate )) とする。dateObject .[[DateValue]] に u を設定する。u を返す。
21.4.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。y を ? ToNumber (year ) とする。t が NaN なら t を +0 𝔽 に設定し、そうでなければ LocalTime (t ) に設定する。month が存在しない場合、m を MonthFromTime (t ) とし、そうでなければ ? ToNumber (month ) とする。date が存在しない場合、dt を DateFromTime (t ) とし、そうでなければ ? ToNumber (date ) とする。newDate を MakeDate (MakeDay (y , m , dt ), TimeWithinDay (t )) とする。u を TimeClip (UTC (newDate )) とする。dateObject .[[DateValue]] に u を設定する。u を返す。
このメソッドの "length" プロパティは 3 𝔽 である。
Note
month が存在しない場合、このメソッドは getMonth()
の値が指定されたかのように振る舞う。date が存在しない場合は getDate()
の値が指定されたかのように振る舞う。
21.4.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。h を ? ToNumber (hour ) とする。min が存在するなら m を ? ToNumber (min ) とする。sec が存在するなら s を ? ToNumber (sec ) とする。ms が存在するなら milli を ? ToNumber (ms ) とする。t が NaN なら NaN を返す。t を LocalTime (t ) に設定する。min が存在しない場合、m を MinFromTime (t ) とする。sec が存在しない場合、s を SecFromTime (t ) とする。ms が存在しない場合、milli を msFromTime (t ) とする。date を MakeDate (Day (t ), MakeTime (h , m , s , milli )) とする。u を TimeClip (UTC (date )) とする。dateObject .[[DateValue]] に u を設定する。u を返す。
このメソッドの "length" プロパティは 4 𝔽 である。
Note
min が存在しない場合、このメソッドは getMinutes()
の値が指定されたかのように振る舞う。sec が存在しない場合は getSeconds()
の値が指定されたかのように振る舞う。ms が存在しない場合は getMilliseconds()
の値が指定されたかのように振る舞う。
21.4.4.23 Date.prototype.setMilliseconds ( ms )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。ms を ? ToNumber (ms ) に設定する。t が NaN なら NaN を返す。t を LocalTime (t ) に設定する。time を MakeTime (HourFromTime (t ), MinFromTime (t ), SecFromTime (t ), ms ) とする。u を TimeClip (UTC (MakeDate (Day (t ), time ))) とする。dateObject .[[DateValue]] に u を設定する。u を返す。
21.4.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。m を ? ToNumber (min ) とする。sec が存在するなら s を ? ToNumber (sec ) とする。ms が存在するなら milli を ? ToNumber (ms ) とする。t が NaN なら NaN を返す。t を LocalTime (t ) に設定する。sec が存在しない場合、s を SecFromTime (t ) とする。ms が存在しない場合、milli を msFromTime (t ) とする。date を MakeDate (Day (t ), MakeTime (HourFromTime (t ), m , s , milli )) とする。u を TimeClip (UTC (date )) とする。dateObject .[[DateValue]] に u を設定する。u を返す。
このメソッドの "length" プロパティは 3 𝔽 である。
Note
sec が存在しない場合、このメソッドは getSeconds()
の値が指定されたかのように振る舞う。ms が存在しない場合は getMilliseconds()
の値が指定されたかのように振る舞う。
21.4.4.25 Date.prototype.setMonth ( month [ , date ] )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。m を ? ToNumber (month ) とする。date が存在するなら dt を ? ToNumber (date ) とする。t が NaN なら NaN を返す。t を LocalTime (t ) に設定する。date が存在しない場合、dt を DateFromTime (t ) とする。newDate を MakeDate (MakeDay (YearFromTime (t ), m , dt ), TimeWithinDay (t )) とする。u を TimeClip (UTC (newDate )) とする。dateObject .[[DateValue]] に u を設定する。u を返す。
このメソッドの "length" プロパティは 2 𝔽 である。
Note
date が存在しない場合、このメソッドは getDate()
の値が指定されたかのように振る舞う。
21.4.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。s を ? ToNumber (sec ) とする。ms が存在するなら milli を ? ToNumber (ms ) とする。t が NaN なら NaN を返す。t を LocalTime (t ) に設定する。ms が存在しない場合、milli を msFromTime (t ) とする。date を MakeDate (Day (t ), MakeTime (HourFromTime (t ), MinFromTime (t ), s , milli )) とする。u を TimeClip (UTC (date )) とする。dateObject .[[DateValue]] に u を設定する。u を返す。
このメソッドの "length" プロパティは 2 𝔽 である。
Note
ms が存在しない場合、このメソッドは getMilliseconds()
の値が指定されたかのように振る舞う。
21.4.4.27 Date.prototype.setTime ( time )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を ? ToNumber (time ) とする。v を TimeClip (t ) とする。dateObject .[[DateValue]] に v を設定する。v を返す。
21.4.4.28 Date.prototype.setUTCDate ( date )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。dt を ? ToNumber (date ) とする。t が NaN なら NaN を返す。newDate を MakeDate (MakeDay (YearFromTime (t ), MonthFromTime (t ), dt ), TimeWithinDay (t )) とする。v を TimeClip (newDate ) とする。dateObject .[[DateValue]] に v を設定する。v を返す。
21.4.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。t が NaN なら t を +0 𝔽 に設定する。y を ? ToNumber (year ) とする。month が存在しない場合、m を MonthFromTime (t ) とし、そうでなければ ? ToNumber (month ) とする。date が存在しない場合、dt を DateFromTime (t ) とし、そうでなければ ? ToNumber (date ) とする。newDate を MakeDate (MakeDay (y , m , dt ), TimeWithinDay (t )) とする。v を TimeClip (newDate ) とする。dateObject .[[DateValue]] に v を設定する。v を返す。
このメソッドの "length" プロパティは 3 𝔽 である。
Note
month が存在しない場合、このメソッドは getUTCMonth()
の値が指定されたかのように振る舞う。date が存在しない場合は getUTCDate()
の値が指定されたかのように振る舞う。
21.4.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。h を ? ToNumber (hour ) とする。min が存在するなら m を ? ToNumber (min ) とする。sec が存在するなら s を ? ToNumber (sec ) とする。ms が存在するなら milli を ? ToNumber (ms ) とする。t が NaN なら NaN を返す。min が存在しない場合、m を MinFromTime (t ) とする。sec が存在しない場合、s を SecFromTime (t ) とする。ms が存在しない場合、milli を msFromTime (t ) とする。date を MakeDate (Day (t ), MakeTime (h , m , s , milli )) とする。v を TimeClip (date ) とする。dateObject .[[DateValue]] に v を設定する。v を返す。
このメソッドの "length" プロパティは 4 𝔽 である。
Note
min が存在しない場合、このメソッドは getUTCMinutes()
の値が指定されたかのように振る舞う。sec が存在しない場合は getUTCSeconds()
の値が指定されたかのように振る舞う。ms が存在しない場合は getUTCMilliseconds()
の値が指定されたかのように振る舞う。
21.4.4.31 Date.prototype.setUTCMilliseconds ( ms )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。ms を ? ToNumber (ms ) に設定する。t が NaN なら NaN を返す。time を MakeTime (HourFromTime (t ), MinFromTime (t ), SecFromTime (t ), ms ) とする。v を TimeClip (MakeDate (Day (t ), time )) とする。dateObject .[[DateValue]] に v を設定する。v を返す。
21.4.4.32 Date.prototype.setUTCMinutes ( min [ , sec [ , ms ] ] )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。m を ? ToNumber (min ) とする。sec が存在するなら s を ? ToNumber (sec ) とする。ms が存在するなら milli を ? ToNumber (ms ) とする。t が NaN なら NaN を返す。sec が存在しない場合、s を SecFromTime (t ) とする。ms が存在しない場合、milli を msFromTime (t ) とする。date を MakeDate (Day (t ), MakeTime (HourFromTime (t ), m , s , milli )) とする。v を TimeClip (date ) とする。dateObject .[[DateValue]] に v を設定する。v を返す。
このメソッドの "length" プロパティは 3 𝔽 である。
Note
sec が存在しない場合、このメソッドは getUTCSeconds()
の値が指定されたかのように振る舞う。ms が存在しない場合は getUTCMilliseconds()
の値が指定されたかのように振る舞う。
21.4.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。m を ? ToNumber (month ) とする。date が存在するなら dt を ? ToNumber (date ) とする。t が NaN なら NaN を返す。date が存在しない場合、dt を DateFromTime (t ) とする。newDate を MakeDate (MakeDay (YearFromTime (t ), m , dt ), TimeWithinDay (t )) とする。v を TimeClip (newDate ) とする。dateObject .[[DateValue]] に v を設定する。v を返す。
このメソッドの "length" プロパティは 2 𝔽 である。
Note
date が存在しない場合、このメソッドは getUTCDate()
の値が指定されたかのように振る舞う。
21.4.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 t を dateObject .[[DateValue]] とする。s を ? ToNumber (sec ) とする。ms が存在するなら milli を ? ToNumber (ms ) とする。t が NaN なら NaN を返す。ms が存在しない場合、milli を msFromTime (t ) とする。date を MakeDate (Day (t ), MakeTime (HourFromTime (t ), MinFromTime (t ), s , milli )) とする。v を TimeClip (date ) とする。dateObject .[[DateValue]] に v を設定する。v を返す。
このメソッドの "length" プロパティは 2 𝔽 である。
Note
ms が存在しない場合、このメソッドは getUTCMilliseconds()
の値が指定されたかのように振る舞う。
21.4.4.35 Date.prototype.toDateString ( )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 tv を dateObject .[[DateValue]] とする。tv が NaN なら "Invalid Date" を返す。t を LocalTime (tv ) とする。DateString (t ) を返す。
21.4.4.36 Date.prototype.toISOString ( )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 tv を dateObject .[[DateValue]] とする。tv が NaN なら RangeError 例外をスローする。アサート: tv は整数 値である。 tv が Date Time String Format で表現できない年に該当するなら RangeError 例外をスローする。tv の Date Time String Format に従ったUTC時刻表現(全ての書式要素およびUTCオフセット "Z" を含む)を返す。
21.4.4.37 Date.prototype.toJSON ( key )
このメソッドは JSON.stringify
(25.5.2 ) で利用するための Date の文字列表現を提供する。
呼び出されると以下の手順を実行する:
O を ? ToObject (this の値) とする。tv を ? ToPrimitive(O , number ) とする。tv が数値かつ有限 でなければ null を返す。? Invoke(O , "toISOString" ) を返す。
Note 1
Note 2
このメソッドは意図的にジェネリックであり、this の値が Date であることを要求しない。そのため他のオブジェクトに転送してメソッドとして利用できる。ただしその場合、toISOString
メソッドが必要である。
21.4.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
ECMA-402 Internationalization API を含む ECMAScript 実装はこのメソッドを ECMA-402 仕様に従って実装しなければならない。ECMA-402 API を含まない実装の場合、以下の仕様が用いられる:
このメソッドは文字列値を返す。その内容は実装定義 だが、現在のタイムゾーンにおける Date の「日付」部分をホスト環境 の現在のロケールの慣習に従った便利で人間に読みやすい形で表現することを意図している。
このメソッドのオプションパラメータの意味は ECMA-402 仕様で定義されている。ECMA-402 を含まない実装ではこれらのパラメータ位置を他の用途に使ってはならない。
21.4.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
ECMA-402 Internationalization API を含む ECMAScript 実装はこのメソッドを ECMA-402 仕様に従って実装しなければならない。ECMA-402 API を含まない実装の場合、以下の仕様が用いられる:
このメソッドは文字列値を返す。その内容は実装定義 だが、現在のタイムゾーンにおける Date をホスト環境 の現在のロケールの慣習に従った便利で人間に読みやすい形で表現することを意図している。
このメソッドのオプションパラメータの意味は ECMA-402 仕様で定義されている。ECMA-402 を含まない実装ではこれらのパラメータ位置を他の用途に使ってはならない。
21.4.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
ECMA-402 Internationalization API を含む ECMAScript 実装はこのメソッドを ECMA-402 仕様に従って実装しなければならない。ECMA-402 API を含まない実装の場合、以下の仕様が用いられる:
このメソッドは文字列値を返す。その内容は実装定義 だが、現在のタイムゾーンにおける Date の「時刻」部分をホスト環境 の現在のロケールの慣習に従った便利で人間に読みやすい形で表現することを意図している。
このメソッドのオプションパラメータの意味は ECMA-402 仕様で定義されている。ECMA-402 を含まない実装ではこれらのパラメータ位置を他の用途に使ってはならない。
21.4.4.41 Date.prototype.toString ( )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 tv を dateObject .[[DateValue]] とする。ToDateString (tv ) を返す。
Note 1
d.[[DateValue]]
が 1000 で割り切れる任意の Date d
について、Date.parse(d.toString())
の結果は d.valueOf()
と等しい。21.4.3.2 を参照。
Note 2
このメソッドはジェネリックではなく、this の値が Date でない場合は TypeError 例外をスローする。そのため他のオブジェクトに転送してメソッドとして利用することはできない。
21.4.4.41.1 TimeString ( tv )
The abstract operation TimeString takes argument tv (a Number, but not NaN ) and returns a String. It performs the following steps when called:
hour を ToZeroPaddedDecimalString (ℝ (HourFromTime (tv )), 2) とする。minute を ToZeroPaddedDecimalString (ℝ (MinFromTime (tv )), 2) とする。second を ToZeroPaddedDecimalString (ℝ (SecFromTime (tv )), 2) とする。hour , ":" , minute , ":" , second , コードユニット 0x0020 (スペース), "GMT" を連結した文字列を返す。
21.4.4.41.2 DateString ( tv )
The abstract operation DateString takes argument tv (a Number, but not NaN ) and returns a String. It performs the following steps when called:
weekday を Table 63 の WeekDay (tv ) の番号に対応する名前とする。month を Table 64 の MonthFromTime (tv ) の番号に対応する名前とする。day を ToZeroPaddedDecimalString (ℝ (DateFromTime (tv )), 2) とする。yv を YearFromTime (tv ) とする。yv が +0 𝔽 または yv > +0 𝔽 なら yearSign を空文字列に、そうでなければ "-" にする。paddedYear を ToZeroPaddedDecimalString (abs (ℝ (yv )), 4) とする。weekday , コードユニット 0x0020 (スペース), month , コードユニット 0x0020 (スペース), day , コードユニット 0x0020 (スペース), yearSign , paddedYear を連結した文字列を返す。
Table 63: 曜日名
Number
Name
+0 𝔽
"Sun"
1 𝔽
"Mon"
2 𝔽
"Tue"
3 𝔽
"Wed"
4 𝔽
"Thu"
5 𝔽
"Fri"
6 𝔽
"Sat"
Table 64: 月名
Number
Name
+0 𝔽
"Jan"
1 𝔽
"Feb"
2 𝔽
"Mar"
3 𝔽
"Apr"
4 𝔽
"May"
5 𝔽
"Jun"
6 𝔽
"Jul"
7 𝔽
"Aug"
8 𝔽
"Sep"
9 𝔽
"Oct"
10 𝔽
"Nov"
11 𝔽
"Dec"
21.4.4.41.3 TimeZoneString ( tv )
The abstract operation TimeZoneString takes argument tv (an integral Number) and returns a String. It performs the following steps when called:
systemTimeZoneIdentifier を SystemTimeZoneIdentifier () とする。IsTimeZoneOffsetString (systemTimeZoneIdentifier ) が true ならoffsetNs を ParseTimeZoneOffsetString (systemTimeZoneIdentifier ) とする。それ以外の場合offsetNs を GetNamedTimeZoneOffsetNanoseconds (systemTimeZoneIdentifier , ℤ (ℝ (tv ) × 106 )) とする。 offset を 𝔽 (truncate (offsetNs / 106 )) とする。offset が +0 𝔽 または offset > +0 𝔽 ならoffsetSign を "+" とする。absOffset を offset とする。それ以外の場合offsetSign を "-" とする。absOffset を -offset とする。 offsetMin を ToZeroPaddedDecimalString (ℝ (MinFromTime (absOffset )), 2) とする。offsetHour を ToZeroPaddedDecimalString (ℝ (HourFromTime (absOffset )), 2) とする。tzName を空文字列またはコードユニット 0x0020 (スペース)、0x0028 (左括弧)、実装定義 のタイムゾーン名、0x0029 (右括弧) を連結した文字列のいずれかとする。offsetSign , offsetHour , offsetMin , tzName を連結した文字列を返す。
21.4.4.41.4 ToDateString ( tv )
The abstract operation ToDateString takes argument tv (an integral Number or NaN ) and returns a String. It performs the following steps when called:
tv が NaN なら "Invalid Date" を返す。t を LocalTime (tv ) とする。DateString (t )、コードユニット 0x0020 (スペース)、TimeString (t )、TimeZoneString (tv ) を連結した文字列を返す。
21.4.4.42 Date.prototype.toTimeString ( )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 tv を dateObject .[[DateValue]] とする。tv が NaN なら "Invalid Date" を返す。t を LocalTime (tv ) とする。TimeString (t ) と TimeZoneString (tv ) を連結した文字列を返す。
21.4.4.43 Date.prototype.toUTCString ( )
このメソッドは this 値に対応する時点を表す文字列値を返す。文字列の形式は RFC 7231 の "HTTP-date" をベースとし、ECMAScript Dates でサポートされる全範囲の時刻を一般化している。
呼び出されると以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 tv を dateObject .[[DateValue]] とする。tv が NaN なら "Invalid Date" を返す。weekday を Table 63 の WeekDay (tv ) の番号に対応する名前とする。month を Table 64 の MonthFromTime (tv ) の番号に対応する名前とする。day を ToZeroPaddedDecimalString (ℝ (DateFromTime (tv )), 2) とする。yv を YearFromTime (tv ) とする。yv が +0 𝔽 または yv > +0 𝔽 なら yearSign を空文字列に、そうでなければ "-" にする。paddedYear を ToZeroPaddedDecimalString (abs (ℝ (yv )), 4) とする。weekday , "," , コードユニット 0x0020 (スペース), day , コードユニット 0x0020 (スペース), month , コードユニット 0x0020 (スペース), yearSign , paddedYear , コードユニット 0x0020 (スペース), TimeString (tv ) を連結した文字列を返す。
21.4.4.44 Date.prototype.valueOf ( )
このメソッドは呼び出された時、以下の手順を実行する:
dateObject を this の値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 dateObject .[[DateValue]] を返す。
21.4.4.45 Date.prototype [ %Symbol.toPrimitive% ] ( hint )
このメソッドは ECMAScript の演算子によって Date をプリミティブ値へ変換するために呼び出される。hint の許可される値は "default" 、"number" 、"string" である。Date は組み込み ECMAScript オブジェクトの中で唯一 "default" を "string" と同等に扱う。他の組み込みオブジェクトは "default" を "number" と同等に扱う。
呼び出されると以下の手順を実行する:
O を this の値とする。O がオブジェクトでなければ TypeError 例外をスローする。hint が "string" または "default" ならtryFirst を string とする。それ以外で hint が "number" ならtryFirst を number とする。 それ以外の場合TypeError 例外をスローする。 ? OrdinaryToPrimitive (O , tryFirst ) を返す。
このプロパティの属性は { [[Writable]] : false , [[Enumerable]] : false , [[Configurable]] : true } である。
このメソッドの "name" プロパティの値は "[Symbol.toPrimitive]" である。