21.4.1 Date オブジェクトの概要と抽象操作の定義
次の抽象操作 は時間値(21.4.1.1 で定義)を操作します。いずれの場合でも、これらの関数のいずれかに対する任意の引数が NaN である場合、結果は NaN になることに注意してください。
21.4.1.1 時間値と時間範囲
ECMAScript における時間の測定は POSIX における時間の測定に類似しており、特に先発グレゴリオ暦、1970年1月1日 UTC の開始時の真夜中をエポック とする定義、および各日を正確に 86,400 秒(各秒は 1000 ミリ秒)から構成されるものとして扱う点を共有しています。
ECMAScript の時刻値 は Number であり、ミリ秒精度で時点を表す整数 Number(有限時刻値 と呼ばれる)、または特定の時点を表さない NaN のいずれかである。MillisecondsPerDay の整数 倍(すなわち、ある整数 d に対する MillisecondsPerDay × d )である有限時刻値は、エポック から d 日の完全な UTC 日数だけ後(d が負の場合はエポック より前)の UTC 日の開始時点を表す。その他の各有限時刻値 tv は、そのような倍数である直前の最大の有限時刻値 s を基準として定義され、s と同じ UTC 日内にありながら、それより (tv - 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 𝔽 で表されます。
注
先発グレゴリオ暦では、うるう年は 4 で割り切れ、かつ 400 で割り切れるか 100 で割り切れない年です。
先発グレゴリオ暦の400年周期には97のうるう年が含まれます。これにより1年あたり平均 365.2425 日、すなわち 31,556,952,000 ミリ秒となります。したがって、Number がミリ秒精度で正確に表現できる最大範囲は、1970年を基準として約 -285,426 年から 285,426 年です。この節で規定される時間値がサポートするより小さい範囲は、1970年を基準として約 -273,790 年から 273,790 年です。
21.4.1.2 時間関連の定数
これらの定数は、以下の節のアルゴリズムから参照されます。
HoursPerDay = 24
MinutesPerHour = 60
SecondsPerMinute = 60
MillisecondsPerSecond = 1000
NanosecondsPerMillisecond = 106
NanosecondsPerMicrosecond = 103
21.4.1.3 Day ( tv )
抽象操作 Day。引数 tv (a finite time value)。戻り値:整数 。 tv が属する日の日番号を返します。 呼び出されると、次の手順を実行する。
floor (ℝ (tv ) / MillisecondsPerDay ) を返す。
21.4.1.4 TimeWithinDay ( tv )
抽象操作 TimeWithinDay。引数 tv (a finite time value)。戻り値:an integer in the interval from 0 (inclusive) to MillisecondsPerDay (exclusive)。 tv が属する日の開始からのミリ秒数を返します。 呼び出されると、次の手順を実行する。
ℝ (tv ) modulo MillisecondsPerDay を返す。
21.4.1.5 DayFromYear ( y )
抽象操作 DayFromYear。引数 y (整数 )。戻り値:整数 。 年 y の最初の日の日番号を返します。 呼び出されると、次の手順を実行する。
注記 : 次の手順で、numberYears1 、numberYears4 、numberYears100 、および numberYears400 は、それぞれエポック から年 y の開始までに現れる、1、4、100、および400で割り切れる年の数を表す。y がエポック より前である場合、その数は負である。numberYears1 を (y - 1970) とする。numberYears4 を floor ((y - 1969) / 4) とする。numberYears100 を floor ((y - 1901) / 100) とする。numberYears400 を floor ((y - 1601) / 400) とする。365 × numberYears1 + numberYears4 - numberYears100 + numberYears400 を返す。
21.4.1.6 TimeFromYear ( y )
抽象操作 TimeFromYear。引数 y (整数 )。戻り値:a time value。 年 y の開始の時間値を返します。 呼び出されると、次の手順を実行する。
𝔽 (MillisecondsPerDay × DayFromYear (y )) を返す。
21.4.1.7 YearFromTime ( tv )
抽象操作 YearFromTime。引数 tv (a finite time value)。戻り値:整数 。 tv が属する年を返します。 呼び出されると、次の手順を実行する。
TimeFromYear (y ) ≤ tv を満たす最大の整数 y (+∞ に最も近いもの)を返す。
21.4.1.8 DayWithinYear ( tv )
抽象操作 DayWithinYear。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 365。 呼び出されると、次の手順を実行する。
Day (tv ) - DayFromYear (YearFromTime (tv )) を返す。
21.4.1.9 InLeapYear ( tv )
抽象操作 InLeapYear。引数 tv (a finite time value)。戻り値:(0 または 1)。 tv がうるう年内にある場合は 1 を、それ以外の場合は 0 を返します。 呼び出されると、次の手順を実行する。
y を YearFromTime (tv ) とする。(y modulo 400) = 0 である場合、1 を返す。 (y modulo 100) = 0 である場合、0 を返す。 (y modulo 4) = 0 である場合、1 を返す。 0 を返す。
21.4.1.10 MonthFromTime ( tv )
抽象操作 MonthFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 11。 tv が属する月を識別する整数 を返します。月の値 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日木曜日に対応することに注意してください。 呼び出されると、次の手順を実行する。
inLeapYear を InLeapYear (tv ) とする。dayWithinYear を DayWithinYear (tv ) とする。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.11 DateFromTime ( tv )
抽象操作 DateFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 1 to 31。 tv が属する月の日を返します。 呼び出されると、次の手順を実行する。
inLeapYear を InLeapYear (tv ) とする。dayWithinYear を DayWithinYear (tv ) とする。month を MonthFromTime (tv ) とする。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.12 WeekDay ( tv )
抽象操作 WeekDay。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 6。 tv が属する曜日を識別する整数 を返します。曜日値 0 は日曜日、1 は月曜日、2 は火曜日、3 は水曜日、4 は木曜日、5 は金曜日、6 は土曜日を指定します。WeekDay(+0 𝔽 ) = 4 であり、1970年1月1日木曜日に対応することに注意してください。 呼び出されると、次の手順を実行する。
(Day (tv ) + 4) modulo 7 を返す。
21.4.1.13 HourFromTime ( tv )
抽象操作 HourFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 23。 tv が属する日の時を返します。 呼び出されると、次の手順を実行する。
floor (ℝ (tv ) / MillisecondsPerHour ) modulo HoursPerDay を返す。
21.4.1.14 MinuteFromTime ( tv )
抽象操作 MinuteFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 59。 tv が属する時の分を返します。 呼び出されると、次の手順を実行する。
floor (ℝ (tv ) / MillisecondsPerMinute ) modulo MinutesPerHour を返す。
21.4.1.15 SecondFromTime ( tv )
抽象操作 SecondFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 59。 tv が属する分の秒を返します。 呼び出されると、次の手順を実行する。
floor (ℝ (tv ) / MillisecondsPerSecond ) modulo SecondsPerMinute を返す。
21.4.1.16 MillisecondFromTime ( tv )
抽象操作 MillisecondFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 999。 tv が属する秒のミリ秒を返します。 呼び出されると、次の手順を実行する。
ℝ (tv ) modulo MillisecondsPerSecond を返す。
21.4.1.17 エポックナノ秒と範囲
エポックナノ秒カウント は、ナノ秒精度で時点を表す整数 です。時間値と同じ範囲をナノ秒で表したもの、すなわち MinEpochNanoseconds から MaxEpochNanoseconds までをサポートします。時間値 NaN に相当するナノ秒値は存在せず、特定の時点がないことを表す表現はありません。
1970年1月1日 UTC の開始時の真夜中の正確な瞬間は値 0 で表されます。最大値は MaxEpochNanoseconds 、最小値は MinEpochNanoseconds です。
21.4.1.18 GetUTCEpochNanoseconds ( year , month , day , hour , minute , second , millisecond , microsecond , nanosecond )
抽象操作 GetUTCEpochNanoseconds。引数 year (整数 )、month (an integer in the inclusive interval from 1 to 12)、day (an integer in the inclusive interval from 1 to 31)、hour (an integer in the inclusive interval from 0 to 23)、minute (an integer in the inclusive interval from 0 to 59)、second (an integer in the inclusive interval from 0 to 59)、millisecond (an integer in the inclusive interval from 0 to 999)、microsecond (an integer in the inclusive interval from 0 to 999) および nanosecond (an integer in the inclusive interval from 0 to 999)。戻り値:an epoch nanoseconds count。 返される値は、UTC における指定された ISO 8601 暦日付および壁時計時刻に対応するエポックナノ秒カウント です。 呼び出されると、次の手順を実行する。
date を MakeDay (𝔽 (year ), 𝔽 (month - 1), 𝔽 (day )) とする。time を MakeTime (𝔽 (hour ), 𝔽 (minute ), 𝔽 (second ), 𝔽 (millisecond )) とする。epochMilliseconds を MakeDate (date , time ) とする。表明 : epochMilliseconds は整数 Number である。ℝ (epochMilliseconds ) × NanosecondsPerMillisecond + microsecond × NanosecondsPerMicrosecond + nanosecond を返す。
21.4.1.19 タイムゾーン識別子
ECMAScript のタイムゾーンはタイムゾーン識別子 によって表されます。これは、0x0000 から 0x007F までの閉区間 内のコード単位だけで構成される String です。
ECMAScript 実装がサポートするタイムゾーンは、AvailableNamedTimeZoneIdentifiers によって返される Time Zone Identifier Record の [[Identifier]] フィールドで表される利用可能な名前付きタイムゾーン 、または IsTimeZoneOffsetString が true を返す String で表されるオフセットタイムゾーン である場合があります。
プライマリタイムゾーン識別子 は、利用可能な名前付きタイムゾーンの優先識別子です。
非プライマリタイムゾーン識別子 は、プライマリタイムゾーン識別子ではない、利用可能な名前付きタイムゾーンの識別子です。
利用可能な名前付きタイムゾーン識別子 は、プライマリタイムゾーン識別子または非プライマリタイムゾーン識別子のいずれかです。
各利用可能な名前付きタイムゾーン識別子は、正確に1つの利用可能な名前付きタイムゾーンに関連付けられます。
各利用可能な名前付きタイムゾーンは、正確に1つのプライマリタイムゾーン識別子と、0個以上の非プライマリタイムゾーン識別子に関連付けられます。
ECMAScript 実装は、識別子 "UTC" を持つ利用可能な名前付きタイムゾーンをサポートしなければならず、これは UTC タイムゾーンのプライマリタイムゾーン識別子でなければなりません。
さらに、実装は任意の数のその他の利用可能な名前付きタイムゾーンをサポートしてもかまいません。
ECMA-402 Internationalization API 仕様で説明されるタイムゾーンの要件に従う実装は、タイムゾーン対応 と呼ばれます。
タイムゾーン対応実装は、IANA Time Zone Database の「Zone」および「Link 」名に対応する利用可能な名前付きタイムゾーンをサポートしなければならず、そのような名前だけをサポートしなければなりません。
タイムゾーン対応実装では、ECMA-402 で規定される AvailableNamedTimeZoneIdentifiers によって明示的に上書きされる場合を除き、プライマリタイムゾーン識別子は IANA Time Zone Database の「Zone」名であり、非プライマリタイムゾーン識別子はそれぞれ「Link 」名です。
IANA Time Zone Database 全体をサポートしない実装にも、タイムゾーンを表す識別子として IANA Time Zone Database の名前を使用することが推奨されます。
21.4.1.20 GetNamedTimeZoneEpochNanoseconds ( timeZoneIdentifier , year , month , day , hour , minute , second , millisecond , microsecond , nanosecond )
実装定義の抽象操作 GetNamedTimeZoneEpochNanoseconds。引数 timeZoneIdentifier (String)、year (整数 )、month (an integer in the inclusive interval from 1 to 12)、day (an integer in the inclusive interval from 1 to 31)、hour (an integer in the inclusive interval from 0 to 23)、minute (an integer in the inclusive interval from 0 to 59)、second (an integer in the inclusive interval from 0 to 59)、millisecond (an integer in the inclusive interval from 0 to 999)、microsecond (an integer in the inclusive interval from 0 to 999) および nanosecond (an integer in the inclusive interval from 0 to 999)。戻り値:リスト (要素:epoch nanoseconds counts )。
返される List 内の各値は、timeZoneIdentifier で識別される名前付きタイムゾーンにおける、指定された ISO 8601 暦日付および壁時計時刻に対応するエポックナノ秒カウント を表します。
入力が負のタイムゾーン遷移(たとえば、夏時間が終了する場合や、タイムゾーン規則の変更によってタイムゾーンオフセットが減少する場合)のため複数回発生するローカル時刻を表す場合、返される List は複数の要素を持ち、数値の昇順で並べ替えられます。
入力が正のタイムゾーン遷移(たとえば、夏時間が開始する場合や、タイムゾーン規則の変更によってタイムゾーンオフセットが増加する場合)のため飛ばされるローカル時刻を表す場合、返される List は空です。
それ以外の場合、返される List は1つの要素を持ちます。
いかなるタイムゾーンについてもローカルな政治的規則を含まない ECMAScript 実装で使用される、GetNamedTimeZoneEpochNanoseconds の既定の実装は、呼び出されたときに次の手順を実行します。
表明 : timeZoneIdentifier は "UTC" である。epochNanoseconds を GetUTCEpochNanoseconds (year , month , day , hour , minute , second , millisecond , microsecond , nanosecond ) とする。« epochNanoseconds » を返す。
注
タイムゾーン対応 実装には、IANA Time Zone Database のタイムゾーン情報を使用することが要求されます(その他のすべての実装にも推奨されます)。
America/New_York における2017年11月5日午前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 に対応)を表し、2番目の要素は 06:30 UTC(UTC オフセット -05:00 の米国東部標準時 01:30 に対応)を表します。
America/New_York における2017年3月12日午前2時30分は存在しないため、GetNamedTimeZoneEpochNanoseconds("America/New_York" , 2017, 3, 12, 2, 30, 0, 0, 0, 0) は空の List を返します。
21.4.1.21 GetNamedTimeZoneOffsetNanoseconds ( timeZoneIdentifier , epochNanoseconds )
実装定義の抽象操作 GetNamedTimeZoneOffsetNanoseconds。引数 timeZoneIdentifier (String) および epochNanoseconds (an epoch nanoseconds count)。戻り値:整数 。
返される整数 は、エポックナノ秒カウント epochNanoseconds に対応する時点における、timeZoneIdentifier で識別される名前付きタイムゾーンの UTC からのオフセットをナノ秒単位で表します。
いかなるタイムゾーンについてもローカルな政治的規則を含まない ECMAScript 実装で使用される、GetNamedTimeZoneOffsetNanoseconds の既定の実装は、呼び出されたときに次の手順を実行します。
表明 : timeZoneIdentifier は "UTC" である。0 を返す。
注
タイムゾーンオフセット値は正または負である場合があります。
21.4.1.22 Time Zone Identifier Record
Time Zone Identifier Record は、利用可能な名前付きタイムゾーン識別子 と、それに対応するプライマリタイムゾーン識別子 を説明するために使用される Record です。
Time Zone Identifier Record は 表 60 に列挙されるフィールドを持ちます。
表 60: Time Zone Identifier Record のフィールド
注
[[Identifier]] がプライマリタイムゾーン識別子 である場合、[[Identifier]] は [[PrimaryIdentifier]] です。
21.4.1.23 AvailableNamedTimeZoneIdentifiers ( )
実装定義の抽象操作 AvailableNamedTimeZoneIdentifiers。引数なし。戻り値:リスト (要素:Time Zone Identifierレコード )。
その結果は、この実装で利用可能なすべての名前付きタイムゾーン識別子 と、それぞれの利用可能な名前付きタイムゾーン識別子 に対応するプライマリタイムゾーン識別子 を説明します。
List は、各 Time Zone Identifier Record の [[Identifier]] フィールドに従って順序付けられます。
ECMA-402 Internationalization API を実装するすべての実装を含むタイムゾーン対応 実装は、ECMA-402 で規定されるとおりに AvailableNamedTimeZoneIdentifiers 抽象操作 を実装しなければなりません。
それ以外の場合、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 は、record .[[Identifier]] が "UTC" であり、record .[[PrimaryIdentifier]] が "UTC" である Time Zone Identifier Record record を含む。result を返す。
21.4.1.24 SystemTimeZoneIdentifier ( )
実装定義の抽象操作 SystemTimeZoneIdentifier。引数なし。戻り値:String。
ホスト環境 の現在のタイムゾーンを表す String を返します。これは、IsTimeZoneOffsetString が true を返す UTC オフセットを表す String、またはプライマリタイムゾーン識別子 のいずれかです。
呼び出されると、次の手順を実行する。
実装が UTC タイムゾーンだけをサポートする場合、"UTC" を返す。 systemTimeZoneString を、ホスト環境 の現在のタイムゾーンを表す String、すなわちプライマリタイムゾーン識別子 またはオフセットタイムゾーン 識別子のいずれかとする。systemTimeZoneString を返す。
注
Date オブジェクトのメソッドで実装が一般に提供する機能水準を保証するため、そのようなものが存在する場合、SystemTimeZoneIdentifier はホスト環境 のタイムゾーン設定に対応する IANA タイムゾーン名を返すことが推奨されます。
GetNamedTimeZoneEpochNanoseconds および GetNamedTimeZoneOffsetNanoseconds は、そのような規則が存在する場合、そのタイムゾーンにおける標準時および夏時間のローカルな政治的規則を反映しなければなりません。
たとえば、ホスト環境 が、ユーザーがタイムゾーンとして米国東部時間を選択したシステム上のブラウザーである場合、SystemTimeZoneIdentifier は "America/New_York" を返します。
21.4.1.25 LocalTime ( tv )
抽象操作 LocalTime。引数 tv (a finite time value)。戻り値:整数の Number 。
tv を UTC からローカル時刻へ変換します。
tv において有効な標準時および夏時間に関するローカルな政治的規則を使用して、この節で規定される方法で結果を決定するべきです。
呼び出されると、次の手順を実行する。
systemTimeZoneIdentifier を SystemTimeZoneIdentifier () とする。IsTimeZoneOffsetString (systemTimeZoneIdentifier ) が true である場合、offsetNanoseconds を ParseTimeZoneOffsetString (systemTimeZoneIdentifier ) とする。そうでない場合、offsetNanoseconds を GetNamedTimeZoneOffsetNanoseconds (systemTimeZoneIdentifier , ℝ (tv ) × NanosecondsPerMillisecond ) とする。 offsetMilliseconds を truncate (offsetNanoseconds / NanosecondsPerMillisecond ) とする。tv + 𝔽 (offsetMilliseconds ) を返す。
注 1
ローカル時刻 tv に対する政治的規則が実装内で利用できない場合、SystemTimeZoneIdentifier は "UTC" を返し、GetNamedTimeZoneOffsetNanoseconds は 0 を返すため、結果は tv です。
注 2
タイムゾーン対応 実装には、IANA Time Zone Database https://www.iana.org/time-zones/ のタイムゾーン情報を使用することが要求されます(その他のすべての実装にも推奨されます)。
注 3
時刻が繰り返される負のタイムゾーン遷移(たとえば、夏時間が終了する場合や、タイムゾーン調整が減少する場合)では、2つの異なる入力時間値 tv UTC が同じローカル時刻 tlocal に変換されます。
LocalTime(UTC (tv local )) は必ずしも常に tv local と等しいとは限りません。同様に、UTC (LocalTime(tv UTC )) も必ずしも常に tv UTC と等しいとは限りません。
21.4.1.26 UTC ( t )
抽象操作 UTC。引数 t (Number)。戻り値:a time value。
t をローカル時刻から UTC 時間値へ変換します。
t において有効な標準時および夏時間に関するローカルな政治的規則を使用して、この節で規定される方法で結果を決定するべきです。
呼び出されると、次の手順を実行する。
t が有限 Number でない場合、NaN を返す。systemTimeZoneIdentifier を SystemTimeZoneIdentifier () とする。IsTimeZoneOffsetString (systemTimeZoneIdentifier ) が true である場合、offsetNanoseconds を ParseTimeZoneOffsetString (systemTimeZoneIdentifier ) とする。そうでない場合、possibleInstants を GetNamedTimeZoneEpochNanoseconds (systemTimeZoneIdentifier , YearFromTime (t ), MonthFromTime (t ) + 1, DateFromTime (t ), HourFromTime (t ), MinuteFromTime (t ), SecondFromTime (t ), MillisecondFromTime (t ), 0, 0) とする。注記 : 次の手順は、t が負のタイムゾーン遷移(たとえば、夏時間が終了する場合や、タイムゾーン規則の変更によってタイムゾーンオフセットが減少する場合)で複数回繰り返されるローカル時刻、または正のタイムゾーン遷移(たとえば、夏時間が開始する場合や、タイムゾーン規則の変更によってタイムゾーンオフセットが増加する場合)で飛ばされるローカル時刻を表す場合に、遷移前のタイムゾーンオフセットを使用して t が解釈されることを保証する。possibleInstants が空でない場合、disambiguatedInstant を possibleInstants [0] とする。そうでない場合、注記 : t は正のタイムゾーン遷移(たとえば、夏時間の開始または UTC オフセットを増加させるタイムゾーン規則の変更による)で飛ばされたローカル時刻を表す。possibleInstantsBefore を GetNamedTimeZoneEpochNanoseconds (systemTimeZoneIdentifier , YearFromTime (tBefore ), MonthFromTime (tBefore ) + 1, DateFromTime (tBefore ), HourFromTime (tBefore ), MinuteFromTime (tBefore ), SecondFromTime (tBefore ), MillisecondFromTime (tBefore ), 0, 0) とする。ここで tBefore は possibleInstantsBefore が空でない最大の整数 Number < t である(すなわち、tBefore は遷移前の最後のローカル時刻を表す)。disambiguatedInstant を possibleInstantsBefore の最後の要素とする。 offsetNanoseconds を GetNamedTimeZoneOffsetNanoseconds (systemTimeZoneIdentifier , disambiguatedInstant ) とする。 offsetMilliseconds を truncate (offsetNanoseconds / NanosecondsPerMillisecond ) とする。t - 𝔽 (offsetMilliseconds ) を返す。
入力 t は名目上は時間値ですが、任意の Number 値 であってもかまいません。
ローカル UTC オフセットに関係なく時間値範囲の境界に対応する入力をサポートできるようにするため、アルゴリズムは t を時間値範囲に制限してはなりません。
たとえば、最大時間値は 8.64 × 1015 であり、"+275760-09-13T00:00:00Z" に対応します。
その瞬間にローカルタイムゾーンオフセットが UTC より1時間進んでいる環境では、これは "+275760-09-13T01:00:00+01:00" に対応する、より大きい入力 8.64 × 1015 + 3.6 × 106 で表されます。
ローカル時刻 t に対する政治的規則が実装内で利用できない場合、SystemTimeZoneIdentifier は "UTC" を返し、GetNamedTimeZoneOffsetNanoseconds は 0 を返すため、結果は t です。
注 1
タイムゾーン対応 実装には、IANA Time Zone Database のタイムゾーン情報を使用することが要求されます(その他のすべての実装にも推奨されます)。
America/New_York における2017年11月5日午前1時30分は2回繰り返されます(時計が戻る)が、午前1時30分 UTC-05 ではなく、午前1時30分 UTC-04 として解釈されなければなりません。
UTC(TimeClip (MakeDate (MakeDay (2017, 10, 5), MakeTime (1, 30, 0, 0)))) において、offsetMilliseconds の値は -4 × MillisecondsPerHour です。
America/New_York における2017年3月12日午前2時30分は存在しませんが、午前2時30分 UTC-05(午前3時30分 UTC-04 と同等)として解釈されなければなりません。
UTC(TimeClip (MakeDate (MakeDay (2017, 2, 12), MakeTime (2, 30, 0, 0)))) において、offsetMilliseconds の値は -5 × MillisecondsPerHour です。
注 2
UTC(LocalTime (t UTC )) は必ずしも常に t UTC と等しいとは限りません。同様に、LocalTime (UTC(t local )) も必ずしも常に t local と等しいとは限りません。
21.4.1.27 MakeTime ( hour , minute , second , millisecond )
抽象操作 MakeTime。引数 hour (Number)、minute (Number)、second (Number) および millisecond (Number)。戻り値:Number。 ミリ秒数を計算します。 呼び出されると、次の手順を実行する。
hour が有限 Number でない、minute が有限 Number でない、second が有限 Number でない、または millisecond が有限 Number でない場合、NaN を返す。hourMV を ! ToIntegerOrInfinity (hour ) とする。minuteMV を ! ToIntegerOrInfinity (minute ) とする。secondMV を ! ToIntegerOrInfinity (second ) とする。millisecondMV を ! ToIntegerOrInfinity (millisecond ) とする。((𝔽 (hourMV ) × 𝔽 (MillisecondsPerHour ) + 𝔽 (minuteMV ) × 𝔽 (MillisecondsPerMinute )) + 𝔽 (secondMV ) × 𝔽 (MillisecondsPerSecond )) + 𝔽 (millisecondMV ) を返す。
注
MakeTime 内の算術は浮動小数点算術であり、結合則が成り立たないため、演算は正しい順序で実行しなければなりません。
21.4.1.28 MakeDay ( year , month , day )
抽象操作 MakeDay。引数 year (Number)、month (Number) および day (Number)。戻り値:(a finite Number または NaN )。 日数を計算します。 呼び出されると、次の手順を実行する。
year が有限 Number でない、month が有限 Number でない、または day が有限 Number でない場合、NaN を返す。yearMV を ! ToIntegerOrInfinity (year ) とする。monthMV を ! ToIntegerOrInfinity (month ) とする。dayMV を ! ToIntegerOrInfinity (day ) とする。balancedYear を 𝔽 (yearMV ) + 𝔽 (floor (monthMV / 12)) とする。balancedYear が有限 Number でない場合、NaN を返す。balancedMonthMV を monthMV modulo 12 とする。YearFromTime (tv ) = ℝ (balancedYear )、MonthFromTime (tv ) = balancedMonthMV 、かつ DateFromTime (tv ) = 1 を満たす有限の時刻値 tv を見つける。ただし、これが不可能な場合(いずれかの引数が範囲外であるため)、NaN を返す。𝔽 (Day (tv )) + 𝔽 (dayMV ) - 1 𝔽 を返す。
21.4.1.29 MakeDate ( day , time )
抽象操作 MakeDate。引数 day (Number) および time (Number)。戻り値:(a finite Number または NaN )。 ミリ秒数を計算します。 呼び出されると、次の手順を実行する。
day が有限 Number でない、または time が有限 Number でない場合、NaN を返す。tv を day × 𝔽 (MillisecondsPerDay ) + time とする。tv が有限 Number でない場合、NaN を返す。tv を返す。
21.4.1.30 MakeFullYear ( year )
抽象操作 MakeFullYear。引数 year (Number)。戻り値:(整数の Number または NaN )。 year の整数 部分に関連付けられた完全な年を返し、0 から 99 までの閉区間 内の任意の値を 1900 年の開始からの年数として解釈します。先発グレゴリオ暦との整合のため、「完全な年」は年 0(紀元前1年)の開始からの完了した年数を符号付きで数えたものとして定義されます。 呼び出されると、次の手順を実行する。
year が NaN 、+∞ 𝔽 、または -∞ 𝔽 のいずれかである場合、NaN を返す。truncated を ! ToIntegerOrInfinity (year ) とする。truncated が 0 から 99 までの閉区間 内にある場合、1900 𝔽 + 𝔽 (truncated ) を返す。𝔽 (truncated ) を返す。
21.4.1.31 TimeClip ( time )
抽象操作 TimeClip。引数 time (Number)。戻り値:a time value。 ミリ秒数を計算します。 呼び出されると、次の手順を実行する。
time が有限 Number でない場合、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 オフセット表現が付加された「日付時刻」形式も含まれます。
THH:mm
THH:mm:ss
THH:mm:ss.sss
範囲外または形式に適合しない要素を含む文字列は、この形式の有効なインスタンスではありません。
注 1
毎日は真夜中に始まり真夜中に終わるため、1つの日付に関連付けられる2つの真夜中を区別するために、00:00 と 24:00 の2つの表記を使用できます。これは、次の2つの表記がまったく同じ時点を指すことを意味します。1995-02-04T24:00 と 1995-02-05T00:00。
注 2
この形式は、RFC 9557 で定義されるタイムゾーン名による注釈をサポートせず、タイムゾーンオフセットの数値表現だけをサポートします。
21.4.1.32.1 拡張年
1970年1月1日から前後約273,790年にわたる時間値の全範囲(21.4.1.1 )を網羅するには、0 より前または 9999 より後の年を表現する必要があります。ISO 8601 は年表現の拡張を許可していますが、情報交換を行う当事者間の相互合意がある場合に限られます。簡略化された ECMAScript 形式では、このような拡張年 表現は6桁でなければならず、常に + または - の符号を接頭辞として付けます。年 0 は正とみなされ、+ 符号を接頭辞として付けなければなりません。年 0 を -000000 と表現することは無効です。時間値の範囲外の時点を表す拡張年を持つ 日付時刻文字列形式 に一致する文字列は、Date.parse によって認識不能として扱われ、実装固有の動作またはヒューリスティックへフォールバックすることなく、その関数は NaN を返します。
注
拡張年を持つ日付時刻値 の例:
-271821-04-20T00:00:00Z
紀元前271822年
-000001-01-01T00:00:00Z
紀元前2年
+000000-01-01T00:00:00Z
紀元前1年
+000001-01-01T00:00:00Z
西暦1年
+001970-01-01T00:00:00Z
西暦1970年
+002009-12-15T00:00:00Z
西暦2009年
+275760-09-13T00:00:00Z
西暦275760年
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 )
抽象操作 IsTimeZoneOffsetString。引数 offsetString (String)。戻り値:Boolean。 戻り値は、offsetString が UTCOffset によって与えられる文法に適合するかどうかを示します。 呼び出されると、次の手順を実行する。
parseResult を ParseText (offsetString , UTCOffset ) とする。parseResult がエラーの List である場合、false を返す。true を返す。
21.4.1.33.2 ParseTimeZoneOffsetString ( offsetString )
抽象操作 ParseTimeZoneOffsetString。引数 offsetString (String)。戻り値:整数 。 戻り値は String offsetString に対応する UTC オフセットをナノ秒数として表します。 呼び出されると、次の手順を実行する。
parseResult を ParseText (offsetString , UTCOffset ) とする。表明 : parseResult はエラーの List ではない。表明 : parseResult は ASCIISign Parse Node を含む。parsedSign を parseResult 内に含まれる ASCIISign Parse Node に一致したソーステキストとする。parsedSign が単一のコードポイント U+002D (HYPHEN-MINUS) である場合、sign を -1 とする。そうでない場合、sign を 1 とする。 注記 : 以下の StringToNumber の適用では、構文解析された各値が十分短い10進数字の文字列であることが保証されているため、精度は失われない。表明 : parseResult は Hour Parse Node を含む。parsedHours を parseResult 内に含まれる Hour Parse Node に一致したソーステキストとする。hours を ℝ (StringToNumber (CodePointsToString (parsedHours ))) とする。parseResult が MinuteSecond Parse Node を含まない場合、minutes を 0 とする。そうでない場合、parsedMinutes を parseResult 内に含まれる最初の MinuteSecond Parse Node に一致したソーステキストとする。minutes を ℝ (StringToNumber (CodePointsToString (parsedMinutes ))) とする。 parseResult が2つの MinuteSecond Parse Node を含まない場合、seconds を 0 とする。そうでない場合、parsedSeconds を parseResult 内に含まれる2番目の MinuteSecond Parse Node に一致したソーステキストとする。seconds を ℝ (StringToNumber (CodePointsToString (parsedSeconds ))) とする。 parseResult が TemporalDecimalFraction Parse Node を含まない場合、nanoseconds を 0 とする。そうでない場合、parsedFraction を parseResult 内に含まれる TemporalDecimalFraction Parse Node に一致したソーステキストとする。fraction を CodePointsToString (parsedFraction ) と "000000000" の文字列連結 とする。nanosecondsString を fraction の 1 から 10 までの部分文字列 とする。nanoseconds を ℝ (StringToNumber (nanosecondsString )) とする。 sign × (((hours × MinutesPerHour + minutes ) × SecondsPerMinute + seconds ) × NanosecondsPerSecond + nanoseconds ) を返す。
21.4.4 Date Prototype オブジェクトのプロパティ
Date prototype オブジェクト は:
%Date.prototype% です。
それ自体が通常オブジェクト です。
Date インスタンスではなく、[[DateValue]] 内部スロットを持ちません。
値が %Object.prototype% である [[Prototype]] 内部スロットを持ちます。
明示的に別段の定義がない限り、以下で定義される Date prototype オブジェクトのメソッドは汎用ではなく、それらに渡される this 値は、時間値に初期化された [[DateValue]] 内部スロットを持つオブジェクトでなければなりません。
21.4.4.1 Date.prototype.constructor
Date.prototype.constructor の初期値は %Date% です。
21.4.4.2 Date.prototype.getDate ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (DateFromTime (LocalTime (tv ))) を返す。
21.4.4.3 Date.prototype.getDay ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (WeekDay (LocalTime (tv ))) を返す。
21.4.4.4 Date.prototype.getFullYear ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (YearFromTime (LocalTime (tv ))) を返す。
21.4.4.5 Date.prototype.getHours ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (HourFromTime (LocalTime (tv ))) を返す。
21.4.4.6 Date.prototype.getMilliseconds ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (MillisecondFromTime (LocalTime (tv ))) を返す。
21.4.4.7 Date.prototype.getMinutes ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (MinuteFromTime (LocalTime (tv ))) を返す。
21.4.4.8 Date.prototype.getMonth ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (MonthFromTime (LocalTime (tv ))) を返す。
21.4.4.9 Date.prototype.getSeconds ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (SecondFromTime (LocalTime (tv ))) を返す。
21.4.4.10 Date.prototype.getTime ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 dateObj .[[DateValue]] を返す。
21.4.4.11 Date.prototype.getTimezoneOffset ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。(tv - LocalTime (tv )) / 𝔽 (MillisecondsPerMinute ) を返す。
21.4.4.12 Date.prototype.getUTCDate ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (DateFromTime (tv )) を返す。
21.4.4.13 Date.prototype.getUTCDay ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (WeekDay (tv )) を返す。
21.4.4.14 Date.prototype.getUTCFullYear ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (YearFromTime (tv )) を返す。
21.4.4.15 Date.prototype.getUTCHours ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (HourFromTime (tv )) を返す。
21.4.4.16 Date.prototype.getUTCMilliseconds ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (MillisecondFromTime (tv )) を返す。
21.4.4.17 Date.prototype.getUTCMinutes ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (MinuteFromTime (tv )) を返す。
21.4.4.18 Date.prototype.getUTCMonth ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (MonthFromTime (tv )) を返す。
21.4.4.19 Date.prototype.getUTCSeconds ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、NaN を返す。𝔽 (SecondFromTime (tv )) を返す。
21.4.4.20 Date.prototype.setDate ( day )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。dayNumber を ? ToNumber (day ) とする。tv が NaN である場合、NaN を返す。tv を LocalTime (tv ) に設定する。newDate を MakeDate (MakeDay (𝔽 (YearFromTime (tv )), 𝔽 (MonthFromTime (tv )), dayNumber ), 𝔽 (TimeWithinDay (tv ))) とする。u を TimeClip (UTC (newDate )) とする。dateObj .[[DateValue]] を u に設定する。u を返す。
21.4.4.21 Date.prototype.setFullYear ( year [ , month [ , day ] ] )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。yearNumber を ? ToNumber (year ) とする。tv が NaN である場合、tv を +0 𝔽 に設定する。そうでない場合、tv を LocalTime (tv ) に設定する。month が存在する場合、monthNumber を ? ToNumber (month ) とする。そうでない場合、monthNumber を 𝔽 (MonthFromTime (tv )) とする。day が存在する場合、dayNumber を ? ToNumber (day ) とする。そうでない場合、dayNumber を 𝔽 (DateFromTime (tv )) とする。newDate を MakeDate (MakeDay (yearNumber , monthNumber , dayNumber ), 𝔽 (TimeWithinDay (tv ))) とする。u を TimeClip (UTC (newDate )) とする。dateObj .[[DateValue]] を u に設定する。u を返す。
このメソッドの "length" プロパティは 3 𝔽 です。
注
month が存在しない場合、このメソッドは month が値 getMonth() で存在したかのように動作します。day が存在しない場合、day が値 getDate() で存在したかのように動作します。
21.4.4.22 Date.prototype.setHours ( hour [ , minute [ , second [ , millisecond ] ] ] )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。hourNumber を ? ToNumber (hour ) とする。minute が存在する場合、minuteNumber を ? ToNumber (minute ) とする。second が存在する場合、secondNumber を ? ToNumber (second ) とする。millisecond が存在する場合、millisecondNumber を ? ToNumber (millisecond ) とする。tv が NaN である場合、NaN を返す。tv を LocalTime (tv ) に設定する。minute が存在しない場合、minuteNumber を 𝔽 (MinuteFromTime (tv )) とする。second が存在しない場合、secondNumber を 𝔽 (SecondFromTime (tv )) とする。millisecond が存在しない場合、millisecondNumber を 𝔽 (MillisecondFromTime (tv )) とする。date を MakeDate (𝔽 (Day (tv )), MakeTime (hourNumber , minuteNumber , secondNumber , millisecondNumber )) とする。u を TimeClip (UTC (date )) とする。dateObj .[[DateValue]] を u に設定する。u を返す。
このメソッドの "length" プロパティは 4 𝔽 です。
注
minute が存在しない場合、このメソッドは minute が値 getMinutes() で存在したかのように動作します。second が存在しない場合、second が値 getSeconds() で存在したかのように動作します。millisecond が存在しない場合、millisecond が値 getMilliseconds() で存在したかのように動作します。
21.4.4.23 Date.prototype.setMilliseconds ( millisecond )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。millisecondNumber を ? ToNumber (millisecond ) とする。tv が NaN である場合、NaN を返す。tv を LocalTime (tv ) に設定する。time を MakeTime (𝔽 (HourFromTime (tv )), 𝔽 (MinuteFromTime (tv )), 𝔽 (SecondFromTime (tv )), millisecondNumber ) とする。u を TimeClip (UTC (MakeDate (𝔽 (Day (tv )), time ))) とする。dateObj .[[DateValue]] を u に設定する。u を返す。
21.4.4.24 Date.prototype.setMinutes ( minute [ , second [ , millisecond ] ] )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。minuteNumber を ? ToNumber (minute ) とする。second が存在する場合、secondNumber を ? ToNumber (second ) とする。millisecond が存在する場合、millisecondNumber を ? ToNumber (millisecond ) とする。tv が NaN である場合、NaN を返す。tv を LocalTime (tv ) に設定する。second が存在しない場合、secondNumber を 𝔽 (SecondFromTime (tv )) とする。millisecond が存在しない場合、millisecondNumber を 𝔽 (MillisecondFromTime (tv )) とする。date を MakeDate (𝔽 (Day (tv )), MakeTime (𝔽 (HourFromTime (tv )), minuteNumber , secondNumber , millisecondNumber )) とする。u を TimeClip (UTC (date )) とする。dateObj .[[DateValue]] を u に設定する。u を返す。
このメソッドの "length" プロパティは 3 𝔽 です。
注
second が存在しない場合、このメソッドは second が値 getSeconds() で存在したかのように動作します。millisecond が存在しない場合、millisecond が値 getMilliseconds() で存在したかのように動作します。
21.4.4.25 Date.prototype.setMonth ( month [ , day ] )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。monthNumber を ? ToNumber (month ) とする。day が存在する場合、dayNumber を ? ToNumber (day ) とする。tv が NaN である場合、NaN を返す。tv を LocalTime (tv ) に設定する。day が存在しない場合、dayNumber を 𝔽 (DateFromTime (tv )) とする。newDate を MakeDate (MakeDay (𝔽 (YearFromTime (tv )), monthNumber , dayNumber ), 𝔽 (TimeWithinDay (tv ))) とする。u を TimeClip (UTC (newDate )) とする。dateObj .[[DateValue]] を u に設定する。u を返す。
このメソッドの "length" プロパティは 2 𝔽 です。
注
day が存在しない場合、このメソッドは day が値 getDate() で存在したかのように動作します。
21.4.4.26 Date.prototype.setSeconds ( second [ , millisecond ] )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。secondNumber を ? ToNumber (second ) とする。millisecond が存在する場合、millisecondNumber を ? ToNumber (millisecond ) とする。tv が NaN である場合、NaN を返す。tv を LocalTime (tv ) に設定する。millisecond が存在しない場合、millisecondNumber を 𝔽 (MillisecondFromTime (tv )) とする。date を MakeDate (𝔽 (Day (tv )), MakeTime (𝔽 (HourFromTime (tv )), 𝔽 (MinuteFromTime (tv )), secondNumber , millisecondNumber )) とする。u を TimeClip (UTC (date )) とする。dateObj .[[DateValue]] を u に設定する。u を返す。
このメソッドの "length" プロパティは 2 𝔽 です。
注
millisecond が存在しない場合、このメソッドは millisecond が値 getMilliseconds() で存在したかのように動作します。
21.4.4.27 Date.prototype.setTime ( time )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 t を ? ToNumber (time ) とする。v を TimeClip (t ) とする。dateObj .[[DateValue]] を v に設定する。v を返す。
21.4.4.28 Date.prototype.setUTCDate ( day )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。dayNumber を ? ToNumber (day ) とする。tv が NaN である場合、NaN を返す。newDate を MakeDate (MakeDay (𝔽 (YearFromTime (tv )), 𝔽 (MonthFromTime (tv )), dayNumber ), 𝔽 (TimeWithinDay (tv ))) とする。v を TimeClip (newDate ) とする。dateObj .[[DateValue]] を v に設定する。v を返す。
21.4.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , day ] ] )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、tv を +0 𝔽 に設定する。yearNumber を ? ToNumber (year ) とする。month が存在する場合、monthNumber を ? ToNumber (month ) とする。そうでない場合、monthNumber を 𝔽 (MonthFromTime (tv )) とする。day が存在する場合、dayNumber を ? ToNumber (day ) とする。そうでない場合、dayNumber を 𝔽 (DateFromTime (tv )) とする。newDate を MakeDate (MakeDay (yearNumber , monthNumber , dayNumber ), 𝔽 (TimeWithinDay (tv ))) とする。v を TimeClip (newDate ) とする。dateObj .[[DateValue]] を v に設定する。v を返す。
このメソッドの "length" プロパティは 3 𝔽 です。
注
month が存在しない場合、このメソッドは month が値 getUTCMonth() で存在したかのように動作します。day が存在しない場合、day が値 getUTCDate() で存在したかのように動作します。
21.4.4.30 Date.prototype.setUTCHours ( hour [ , minute [ , second [ , millisecond ] ] ] )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。hourNumber を ? ToNumber (hour ) とする。minute が存在する場合、minuteNumber を ? ToNumber (minute ) とする。second が存在する場合、secondNumber を ? ToNumber (second ) とする。millisecond が存在する場合、millisecondNumber を ? ToNumber (millisecond ) とする。tv が NaN である場合、NaN を返す。minute が存在しない場合、minuteNumber を 𝔽 (MinuteFromTime (tv )) とする。second が存在しない場合、secondNumber を 𝔽 (SecondFromTime (tv )) とする。millisecond が存在しない場合、millisecondNumber を 𝔽 (MillisecondFromTime (tv )) とする。date を MakeDate (𝔽 (Day (tv )), MakeTime (hourNumber , minuteNumber , secondNumber , millisecondNumber )) とする。v を TimeClip (date ) とする。dateObj .[[DateValue]] を v に設定する。v を返す。
このメソッドの "length" プロパティは 4 𝔽 です。
注
minute が存在しない場合、このメソッドは minute が値 getUTCMinutes() で存在したかのように動作します。second が存在しない場合、second が値 getUTCSeconds() で存在したかのように動作します。millisecond が存在しない場合、millisecond が値 getUTCMilliseconds() で存在したかのように動作します。
21.4.4.31 Date.prototype.setUTCMilliseconds ( millisecond )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。millisecondNumber を ? ToNumber (millisecond ) とする。tv が NaN である場合、NaN を返す。time を MakeTime (𝔽 (HourFromTime (tv )), 𝔽 (MinuteFromTime (tv )), 𝔽 (SecondFromTime (tv )), millisecondNumber ) とする。v を TimeClip (MakeDate (𝔽 (Day (tv )), time )) とする。dateObj .[[DateValue]] を v に設定する。v を返す。
21.4.4.32 Date.prototype.setUTCMinutes ( minute [ , second [ , millisecond ] ] )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。minuteNumber を ? ToNumber (minute ) とする。second が存在する場合、secondNumber を ? ToNumber (second ) とする。millisecond が存在する場合、millisecondNumber を ? ToNumber (millisecond ) とする。tv が NaN である場合、NaN を返す。second が存在しない場合、secondNumber を 𝔽 (SecondFromTime (tv )) とする。millisecond が存在しない場合、millisecondNumber を 𝔽 (MillisecondFromTime (tv )) とする。date を MakeDate (𝔽 (Day (tv )), MakeTime (𝔽 (HourFromTime (tv )), minuteNumber , secondNumber , millisecondNumber )) とする。v を TimeClip (date ) とする。dateObj .[[DateValue]] を v に設定する。v を返す。
このメソッドの "length" プロパティは 3 𝔽 です。
注
second が存在しない場合、このメソッドは second が値 getUTCSeconds() で存在したかのように動作します。millisecond が存在しない場合、millisecond が getUTCMilliseconds() によって返される値で存在したかのように動作します。
21.4.4.33 Date.prototype.setUTCMonth ( month [ , day ] )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。monthNumber を ? ToNumber (month ) とする。day が存在する場合、dayNumber を ? ToNumber (day ) とする。tv が NaN である場合、NaN を返す。day が存在しない場合、dayNumber を 𝔽 (DateFromTime (tv )) とする。newDate を MakeDate (MakeDay (𝔽 (YearFromTime (tv )), monthNumber , dayNumber ), 𝔽 (TimeWithinDay (tv ))) とする。v を TimeClip (newDate ) とする。dateObj .[[DateValue]] を v に設定する。v を返す。
このメソッドの "length" プロパティは 2 𝔽 です。
注
day が存在しない場合、このメソッドは day が値 getUTCDate() で存在したかのように動作します。
21.4.4.34 Date.prototype.setUTCSeconds ( second [ , millisecond ] )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。secondNumber を ? ToNumber (second ) とする。millisecond が存在する場合、millisecondNumber を ? ToNumber (millisecond ) とする。tv が NaN である場合、NaN を返す。millisecond が存在しない場合、millisecondNumber を 𝔽 (MillisecondFromTime (tv )) とする。date を MakeDate (𝔽 (Day (tv )), MakeTime (𝔽 (HourFromTime (tv )), 𝔽 (MinuteFromTime (tv )), secondNumber , millisecondNumber )) とする。v を TimeClip (date ) とする。dateObj .[[DateValue]] を v に設定する。v を返す。
このメソッドの "length" プロパティは 2 𝔽 です。
注
millisecond が存在しない場合、このメソッドは millisecond が値 getUTCMilliseconds() で存在したかのように動作します。
21.4.4.35 Date.prototype.toDateString ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、"Invalid Date" を返す。t を LocalTime (tv ) とする。DateString (t ) を返す。
21.4.4.36 Date.prototype.toISOString ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、RangeError 例外をスローする。表明 : tv は整数 Number である。tv が日付時刻文字列形式 で表現できない年に対応する場合、RangeError 例外をスローする。UTC 時間尺度上で、すべての形式要素と UTC オフセット表現 "Z" を含む、日付時刻文字列形式 による tv の String 表現を返す。
21.4.4.37 Date.prototype.toJSON ( key )
このメソッドは JSON.stringify(25.5.4 )で使用するための Date の String 表現を提供します。
呼び出されたとき、次の手順を実行します。
obj を ? ToObject (this 値) とする。tv を ? ToPrimitive (obj , number ) とする。tv が Number であり、かつ tv が有限 Number でない場合、null を返す。? Invoke (obj , "toISOString" ) を返す。
注 1
注 2
このメソッドは意図的に汎用です。this 値が Date であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。ただし、そのようなオブジェクトは toISOString メソッドを持つ必要があります。
21.4.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
ECMA-402 Internationalization API を含む ECMAScript 実装は、ECMA-402 で規定されるとおりにこのメソッドを実装しなければなりません。それ以外の場合、このメソッドには次の仕様が使用されます。
このメソッドは String 値を返します。String の内容は実装定義 ですが、ホスト環境 の現在のロケールの慣例に対応する、便利で人間が読みやすい形式で、現在のタイムゾーンにおける Date の「日付」部分を表すことを意図しています。
このメソッドの省略可能なパラメーターの意味は ECMA-402 で定義されます。ECMA-402 のサポートを含まない実装は、それらのパラメーター位置を他の目的に使用してはなりません。
21.4.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
ECMA-402 Internationalization API を含む ECMAScript 実装は、ECMA-402 で規定されるとおりにこのメソッドを実装しなければなりません。それ以外の場合、このメソッドには次の仕様が使用されます。
このメソッドは String 値を返します。String の内容は実装定義 ですが、ホスト環境 の現在のロケールの慣例に対応する、便利で人間が読みやすい形式で、現在のタイムゾーンにおける Date を表すことを意図しています。
このメソッドの省略可能なパラメーターの意味は ECMA-402 で定義されます。ECMA-402 のサポートを含まない実装は、それらのパラメーター位置を他の目的に使用してはなりません。
21.4.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
ECMA-402 Internationalization API を含む ECMAScript 実装は、ECMA-402 で規定されるとおりにこのメソッドを実装しなければなりません。それ以外の場合、このメソッドには次の仕様が使用されます。
このメソッドは String 値を返します。String の内容は実装定義 ですが、ホスト環境 の現在のロケールの慣例に対応する、便利で人間が読みやすい形式で、現在のタイムゾーンにおける Date の「時刻」部分を表すことを意図しています。
このメソッドの省略可能なパラメーターの意味は ECMA-402 で定義されます。ECMA-402 のサポートを含まない実装は、それらのパラメーター位置を他の目的に使用してはなりません。
21.4.4.41 Date.prototype.toString ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。ToDateString (tv ) を返す。
注 1
d.[[DateValue]] が 1000 で割り切れる任意の Date d について、Date.parse(d.toString()) の結果は d.valueOf() と等しくなります。21.4.3.2 を参照してください。
注 2
このメソッドは汎用ではありません。this 値が Date でない場合、TypeError 例外をスローします。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことはできません。
21.4.4.41.1 TimeString ( tv )
抽象操作 TimeString。引数 tv (a Number, but not NaN )。戻り値:String。 呼び出されると、次の手順を実行する。
hour を ToZeroPaddedDecimalString (HourFromTime (tv ), 2) とする。minute を ToZeroPaddedDecimalString (MinuteFromTime (tv ), 2) とする。second を ToZeroPaddedDecimalString (SecondFromTime (tv ), 2) とする。hour 、":" 、minute 、":" 、second 、コード単位 0x0020 (SPACE)、および "GMT" の文字列連結 を返す。
21.4.4.41.2 DateString ( tv )
抽象操作 DateString。引数 tv (a Number, but not NaN )。戻り値:String。 呼び出されると、次の手順を実行する。
weekday を、表 61 内で WeekDay Index = WeekDay (tv ) である項目の Name とする。month を、表 62 内で Month Index = MonthFromTime (tv ) である項目の Name とする。day を ToZeroPaddedDecimalString (DateFromTime (tv ), 2) とする。yv を YearFromTime (tv ) とする。yv ≥ 0 である場合、yearSign を空の String とする。そうでない場合、yearSign を "-" とする。paddedYear を ToZeroPaddedDecimalString (abs (yv ), 4) とする。weekday 、コード単位 0x0020 (SPACE)、month 、コード単位 0x0020 (SPACE)、day 、コード単位 0x0020 (SPACE)、yearSign 、および paddedYear の文字列連結 を返す。
表 61: 曜日の名前
WeekDay インデックス
名前
0
"Sun"
1
"Mon"
2
"Tue"
3
"Wed"
4
"Thu"
5
"Fri"
6
"Sat"
表 62: 年の月の名前
Month インデックス
名前
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 )
抽象操作 TimeZoneString。引数 tv (整数の Number )。戻り値:String。 呼び出されると、次の手順を実行する。
systemTimeZoneIdentifier を SystemTimeZoneIdentifier () とする。IsTimeZoneOffsetString (systemTimeZoneIdentifier ) が true である場合、offsetNanoseconds を ParseTimeZoneOffsetString (systemTimeZoneIdentifier ) とする。そうでない場合、offsetNanoseconds を GetNamedTimeZoneOffsetNanoseconds (systemTimeZoneIdentifier , ℝ (tv ) × NanosecondsPerMillisecond ) とする。 offsetMilliseconds を truncate (offsetNanoseconds / NanosecondsPerMillisecond ) とする。offsetMilliseconds ≥ 0 である場合、offsetSign を "+" とする。absOffsetMilliseconds を offsetMilliseconds とする。そうでない場合、offsetSign を "-" とする。absOffsetMilliseconds を -offsetMilliseconds とする。 offsetMinute を ToZeroPaddedDecimalString (MinuteFromTime (𝔽 (absOffsetMilliseconds )), 2) とする。offsetHour を ToZeroPaddedDecimalString (HourFromTime (𝔽 (absOffsetMilliseconds )), 2) とする。timeZoneName を、空の String、またはコード単位 0x0020 (SPACE)、コード単位 0x0028 (LEFT PARENTHESIS)、実装定義 のタイムゾーン名、およびコード単位 0x0029 (RIGHT PARENTHESIS) の文字列連結 のいずれかである実装定義 の文字列とする。offsetSign 、offsetHour 、offsetMinute 、および timeZoneName の文字列連結 を返す。
21.4.4.41.4 ToDateString ( tv )
抽象操作 ToDateString。引数 tv ((整数の Number または NaN ))。戻り値:String。 呼び出されると、次の手順を実行する。
tv が NaN である場合、"Invalid Date" を返す。localTime を LocalTime (tv ) とする。DateString (localTime )、コード単位 0x0020 (SPACE)、TimeString (localTime )、および TimeZoneString (tv ) の文字列連結 を返す。
21.4.4.42 Date.prototype.toTimeString ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、"Invalid Date" を返す。localTime を LocalTime (tv ) とする。TimeString (localTime ) と TimeZoneString (tv ) の文字列連結 を返す。
21.4.4.43 Date.prototype.toUTCString ( )
このメソッドは、this 値に対応する時点を表す String 値を返します。String の形式は RFC 7231 の HTTP-date に基づいており、ECMAScript Date がサポートする時間の全範囲をサポートするよう一般化されています。
呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 tv を dateObj .[[DateValue]] とする。tv が NaN である場合、"Invalid Date" を返す。weekday を、表 61 内で WeekDay Index = WeekDay (tv ) である項目の Name とする。month を、表 62 内で Month Index = MonthFromTime (tv ) である項目の Name とする。day を ToZeroPaddedDecimalString (DateFromTime (tv ), 2) とする。yv を YearFromTime (tv ) とする。yv ≥ 0 である場合、yearSign を空の String とする。そうでない場合、yearSign を "-" とする。paddedYear を ToZeroPaddedDecimalString (abs (yv ), 4) とする。weekday 、"," 、コード単位 0x0020 (SPACE)、day 、コード単位 0x0020 (SPACE)、month 、コード単位 0x0020 (SPACE)、yearSign 、paddedYear 、コード単位 0x0020 (SPACE)、および TimeString (tv ) の文字列連結 を返す。
21.4.4.44 Date.prototype.valueOf ( )
このメソッドは呼び出されたとき、次の手順を実行します。
dateObj を this 値とする。? RequireInternalSlot (dateObj , [[DateValue]] ) を実行する。 dateObj .[[DateValue]] を返す。
21.4.4.45 Date.prototype [ %Symbol.toPrimitive% ] ( hint )
このメソッドは、Date をプリミティブ値へ変換するために ECMAScript 言語演算子によって呼び出されます。hint に許される値は "default" 、"number" 、および "string" です。Date は、"default" を "string" と同等に扱うという点で組込み ECMAScript オブジェクトの中で固有です。その他のすべての組込み ECMAScript オブジェクトは "default" を "number" と同等に扱います。
呼び出されたとき、次の手順を実行します。
obj を this 値とする。obj が Object でない場合、TypeError 例外をスローする。hint が "string" または "default" のいずれかである場合、tryFirst を string とする。そうでなく、hint が "number" である場合、tryFirst を number とする。 そうでない場合、TypeError 例外をスローする。 ? OrdinaryToPrimitive (obj , tryFirst ) を返す。
このプロパティは属性 { [[Writable]] : false , [[Enumerable]] : false , [[Configurable]] : true } を持ちます。
このメソッドの "name" プロパティの値は "[Symbol.toPrimitive]" です。