21.4.1 Dateオブジェクトの概要および抽象操作の定義
以下の抽象操作は時刻値 (21.4.1.1 で定義される)に対して動作します。なお、いずれの場合も、これらの関数のいずれかへの任意の引数が NaN の場合、結果は NaN になります。
21.4.1.1 時刻値と時刻範囲
ECMAScriptにおける時刻の測定はPOSIXにおける時刻の測定に類似しており、特に、先発グレゴリオ暦、1970年1月1日UTCの始まりの午前0時を エポック とすること、およびすべての日を正確に86,400秒(それぞれが1000ミリ秒の長さ)から成るものとして数えることによって定義される点を共有します。
ECMAScriptの 時刻値 はNumberであり、ミリ秒精度で時点を表す有限の整数Number、または特定の時点を表さない NaN のいずれかです。24 × 60 × 60 × 1000 = 86,400,000 の倍数である時刻値(すなわち、ある整数 d について 86,400,000 × d であるもの)は、エポック から d 個の完全なUTC日だけ後の(負の d ではエポック より前の)UTC日の開始時点を表します。他のすべての有限時刻値 t は、そのような倍数である直前の最大の時刻値 s に対して定義され、s と同じUTC日内で、(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の始まりの午前0時を基準として、ちょうど -100,000,000 日から 100,000,000 日までの時刻値範囲がサポートされます。
1970年1月1日UTCの始まりの午前0時ちょうどは、時刻値 +0 𝔽 によって表されます。
Note
先発グレゴリオ暦では、うるう年は、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
msPerSecond = 1000 𝔽
21.4.1.3 Day ( t )
The abstract operation Day takes argument t (有限時刻値 ) and returns 整数Number. t が属する日の通日番号を返します。 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 の最初の日の通日番号を返します。 It performs the following steps when called:
ry を ℝ (y ) とする。NOTE : 以下のステップでは、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 𝔽 を返す。Assert : dayWithinYear < 365 𝔽 + inLeapYear 。11 𝔽 を返す。
21.4.1.12 DateFromTime ( t )
The abstract operation DateFromTime takes argument t (有限時刻値 ) and returns 1 𝔽 から 31 𝔽 までの包含区間内の整数Number. t が属する月の日を返します。 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 を返す。Assert : 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 が属する日の時を返します。 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 が属する時の分を返します。 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 が属する分の秒を返します。 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 が属する秒のミリ秒を返します。 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 ) とする。Assert : ms は整数Numberである。ℤ (ℝ (ms ) × 106 + microsecond × 103 + 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仕様に記述される時間帯の要件に従う実装は、time zone aware と呼ばれます。
時間帯対応実装は、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 )
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の既定の実装は、呼び出されたとき次の手順を実行します:
Assert : 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/ の時間帯情報を使用することが要求されます。
America/New_Yorkにおける2017年11月5日午前1時30分は2回繰り返されるため、GetNamedTimeZoneEpochNanoseconds("America/New_York" , 2017, 11, 5, 1, 30, 0, 0, 0, 0) は、最初の要素が05:30 UTC(UTCオフセット -04:00 の米国東部夏時間01:30に対応)を表し、2番目の要素が06:30 UTC(UTCオフセット -05:00 の米国東部標準時01:30に対応)を表す、長さ2のList を返します。
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 )
The implementation-defined abstract operation GetNamedTimeZoneOffsetNanoseconds takes arguments timeZoneIdentifier (String) and epochNanoseconds (BigInt) and returns 整数.
返される整数は、timeZoneIdentifier によって識別される名前付き時間帯のUTCからのオフセットを、epochNanoseconds に対応するエポック 相対の時点において、いずれもナノ秒単位で表します。
いかなる時間帯についてもローカルな政治的規則を含まないECMAScript実装で使用される、GetNamedTimeZoneOffsetNanosecondsの既定の実装は、呼び出されたとき次の手順を実行します:
Assert : timeZoneIdentifier は "UTC" である。0 を返す。
Note
21.4.1.22 Time Zone Identifier Record
Time Zone Identifier Record は、利用可能な名前付き時間帯識別子 およびそれに対応する一次時間帯識別子 を記述するために使用されるRecord です。
Time Zone Identifier Recordは、Table 59 に示されるフィールドを持ちます。
Table 59: Time Zone Identifier Record Fields
フィールド名
値
意味
[[Identifier]]
String
実装によってサポートされる利用可能な名前付き時間帯識別子 。
[[PrimaryIdentifier]]
String
[[Identifier]] が解決される一次時間帯識別子 。
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を実装するすべての実装を含む時間帯対応実装は、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 に関連付けられた一次時間帯識別子 に設定する。NOTE : 実装は、一次時間帯識別子 を得るために identifier を反復的に解決する必要がある場合がある。record を Time Zone Identifier Record { [[Identifier]] : identifier , [[PrimaryIdentifier]] : primary } とする。record を result に追加する。Assert : result は、r .[[Identifier]] が "UTC" であり r .[[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.
ホスト環境の現在の時間帯を表すStringを返します。これは、IsTimeZoneOffsetString が true を返すUTCオフセットを表すString、または一次時間帯識別子 のいずれかです。
It performs the following steps when called:
実装がUTC時間帯のみをサポートする場合、"UTC" を返す。 systemTimeZoneString を、ホスト環境の現在の時間帯を表すString、すなわち一次時間帯識別子 またはオフセット時間帯 識別子のいずれかとする。systemTimeZoneString を返す。
Note
実装がDateオブジェクトのメソッドで一般的に提供する機能水準を確保するため、SystemTimeZoneIdentifierは、そのようなものが存在する場合、ホスト環境の時間帯設定に対応するIANA時間帯名を返すことが推奨されます。
GetNamedTimeZoneEpochNanoseconds およびGetNamedTimeZoneOffsetNanoseconds は、その時間帯に標準時および夏時間に関するローカルな政治的規則が存在する場合、それを反映しなければなりません。
たとえば、ホスト環境が、ユーザーが時間帯として米国東部時間を選択したシステム上のブラウザーである場合、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) とする。NOTE : 以下のステップは、t が負の時間帯遷移(たとえば夏時間の終了時、または時間帯規則の変更により時間帯オフセットが減少した場合)で複数回繰り返されるローカル時刻、または正の時間帯遷移(たとえば夏時間の開始時、または時間帯規則の変更により時間帯オフセットが増加した場合)でスキップされたローカル時刻を表す場合に、t が遷移前の時間帯オフセットを使用して解釈されることを保証する。possibleInstants が空でない場合、次を行う:disambiguatedInstant を possibleInstants [0] とする。それ以外の場合、NOTE : t は正の時間帯遷移(たとえば夏時間の開始または時間帯規則の変更によりUTCオフセットが増加すること)でスキップされたローカル時刻を表す。possibleInstantsBefore を GetNamedTimeZoneEpochNanoseconds (systemTimeZoneIdentifier , ℝ (YearFromTime (tBefore )), ℝ (MonthFromTime (tBefore )) + 1, ℝ (DateFromTime (tBefore )), ℝ (HourFromTime (tBefore )), ℝ (MinFromTime (tBefore )), ℝ (SecFromTime (tBefore )), ℝ (msFromTime (tBefore )), 0, 0) とする。ここで tBefore は、possibleInstantsBefore が空でないような t 未満の最大の整数Number(すなわち、tBefore は遷移前の最後のローカル時刻を表す)である。disambiguatedInstant を possibleInstantsBefore の最後の要素とする。 offsetNs を GetNamedTimeZoneOffsetNanoseconds (systemTimeZoneIdentifier , disambiguatedInstant ) とする。 offsetMs を truncate (offsetNs / 106 ) とする。t - 𝔽 (offsetMs ) を返す。
入力 t は名目上は時刻値 ですが、任意のNumber値であってもかまいません。
このアルゴリズムは、時刻値 範囲の境界に対応する入力がローカルUTCオフセットに関係なくサポートされるように、t を時刻値 範囲に制限してはなりません。
たとえば、最大の時刻値 は 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/ の時間帯情報を使用することが要求されます。
America/New_Yorkにおける2017年11月5日午前1時30分は2回繰り返されます(秋の後退)が、UTC-05の午前1時30分ではなく、UTC-04の午前1時30分として解釈されなければなりません。
UTC(TimeClip (MakeDate (MakeDay (2017, 10, 5), MakeTime (1, 30, 0, 0)))) では、offsetMs の値は -4 × msPerHour です。
America/New_Yorkにおける2017年3月12日午前2時30分は存在しませんが、UTC-05の午前2時30分(UTC-04の午前3時30分に相当)として解釈されなければなりません。
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 (a Number), month (a Number), and date (a Number) and returns a finite Number or NaN . 日数を計算します。 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 (a Number) and time (a Number) and returns a finite Number or NaN . ミリ秒数を計算します。 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 の整数部分に関連付けられた完全な年を返します。0から99までの包含区間内の任意の値は、1900年の開始からの年数として解釈されます。先発グレゴリオ暦との整合のため、「完全な年」は年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 (a Number) and returns a time value. ミリ秒数を計算します。 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
午前0時から経過した完全な時の数であり、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
範囲外または不適合な要素を含む文字列は、この形式の有効なインスタンスではありません。
Note 1
すべての日は午前0時で始まり午前0時で終わるため、00:00 と 24:00 の2つの表記は、1つの日付に関連付けられる2つの午前0時を区別するために利用できます。これは、次の2つの表記がまったく同じ時点を指すことを意味します:1995-02-04T24:00 と 1995-02-05T00:00。後者の形式を「暦日の終わり」と解釈することはISO 8601と整合しますが、同仕様はこれを時間間隔の記述用に予約しており、単一時点の表現内では許可していません。
Note 2
CET、ESTなどの民用時間帯の略称を規定する国際標準は存在せず、同じ略称が非常に異なる2つの時間帯に使用されることさえあります。このため、ISO 8601およびこの形式はいずれも、時間帯オフセットの数値表現を指定しています。
21.4.1.32.1 拡張年
1970年1月1日から前後おおよそ273,790年にわたる完全な時刻値 範囲(21.4.1.1 )を扱うには、0年より前または9999年より後の年を表現する必要があります。ISO 8601は年表現の拡張を許可しますが、それは情報交換の当事者間の相互合意による場合に限られます。単純化されたECMAScript形式では、そのような拡張年表現は6桁でなければならず、常に + または - の符号が前置されます。年0は正と見なされ、+ 符号を前置しなければなりません。年0を -000000 と表すことは無効です。時刻値 の範囲外の時点を表す拡張年を伴って 日時文字列形式 に一致するStringは、Date.parse によって認識不能として扱われ、その関数は実装固有の挙動またはヒューリスティックにフォールバックすることなく NaN を返します。
Note
拡張年を持つdate-time値 の例:
-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 )
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 整数. 返り値は、String offsetString に対応するUTCオフセットをナノ秒数として表したものです。 It performs the following steps when called:
parseResult を ParseText (offsetString , UTCOffset ) とする。Assert : parseResult はエラーのList ではない。Assert : parseResult は ASCIISign Parse Node を含む。parsedSign を、parseResult 内に含まれる ASCIISign Parse Node に一致したソーステキストとする。parsedSign が単一のコードポイント U+002D (HYPHEN-MINUS) である場合、次を行う:sign を -1 とする。それ以外の場合、sign を 1 とする。 NOTE : 以下のStringToNumber の適用は精度を失わない。解析された各値は十分に短い10進数字列であることが保証されているためである。Assert : 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 × 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 𝔽 に設定する。そうでない場合、t を LocalTime (t ) に設定する。month が存在する場合、m を ? ToNumber (month ) とする。そうでない場合、m を MonthFromTime (t ) とする。date が存在する場合、dt を ? ToNumber (date ) とする。そうでない場合、dt を DateFromTime (t ) とする。newDate を MakeDate (MakeDay (y , m , dt ), TimeWithinDay (t )) とする。u を TimeClip (UTC (newDate )) とする。dateObject .[[DateValue]] を u に設定する。u を返す。
このメソッドの"length" プロパティは 3 𝔽 です。
Note
month が存在しない場合、このメソッドは month が値 getMonth() とともに存在したかのように動作します。date が存在しない場合、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 が存在しない場合、このメソッドは min が値 getMinutes() とともに存在したかのように動作します。sec が存在しない場合、sec が値 getSeconds() とともに存在したかのように動作します。ms が存在しない場合、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 が存在しない場合、このメソッドは sec が値 getSeconds() とともに存在したかのように動作します。ms が存在しない場合、これは 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 が存在しない場合、このメソッドは 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 が存在しない場合、このメソッドは 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 を ? ToNumber (month ) とする。そうでない場合、m を MonthFromTime (t ) とする。date が存在する場合、dt を ? ToNumber (date ) とする。そうでない場合、dt を DateFromTime (t ) とする。newDate を MakeDate (MakeDay (y , m , dt ), TimeWithinDay (t )) とする。v を TimeClip (newDate ) とする。dateObject .[[DateValue]] を v に設定する。v を返す。
このメソッドの"length" プロパティは 3 𝔽 です。
Note
month が存在しない場合、このメソッドは month が値 getUTCMonth() とともに存在したかのように動作します。date が存在しない場合、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 が存在しない場合、このメソッドは min が値 getUTCMinutes() とともに存在したかのように動作します。sec が存在しない場合、sec が値 getUTCSeconds() とともに存在したかのように動作します。ms が存在しない場合、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 が存在しない場合、このメソッドは sec が値 getUTCSeconds() とともに存在したかのように動作します。ms が存在しない場合、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 が存在しない場合、このメソッドは 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 が存在しない場合、このメソッドは 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 例外をスローする。Assert : tv は整数Numberである。tv が Date Time String Format で表現できない年に対応する場合、RangeError 例外をスローする。UTC時間スケール上で、すべての形式要素およびUTCオフセット表現 "Z" を含む、Date Time String Format における 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 が有限でない場合、null を返す。? Invoke (obj , "toISOString" ) を返す。
Note 1
Note 2
このメソッドは意図的に汎用です。そのthis 値がDateであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。ただし、そのようなオブジェクトがtoISOStringメソッドを持つことは要求されます。
21.4.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
ECMA-402 Internationalization APIを含むECMAScript実装は、このメソッドをECMA-402仕様で指定されるとおりに実装しなければなりません。ECMAScript実装がECMA-402 APIを含まない場合、このメソッドについて以下の仕様が使用されます:
このメソッドはString値を返します。Stringの内容は実装定義ですが、ホスト環境の現在のロケールの慣習に対応する便利で人間が読める形式で、現在の時間帯におけるDateの「日付」部分を表すことを意図しています。
このメソッドの任意パラメーターの意味はECMA-402仕様で定義されます。ECMA-402サポートを含まない実装は、これらのパラメーター位置を他の目的に使用してはなりません。
21.4.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
ECMA-402 Internationalization APIを含むECMAScript実装は、このメソッドをECMA-402仕様で指定されるとおりに実装しなければなりません。ECMAScript実装がECMA-402 APIを含まない場合、このメソッドについて以下の仕様が使用されます:
このメソッドはString値を返します。Stringの内容は実装定義ですが、ホスト環境の現在のロケールの慣習に対応する便利で人間が読める形式で、現在の時間帯におけるDateを表すことを意図しています。
このメソッドの任意パラメーターの意味はECMA-402仕様で定義されます。ECMA-402サポートを含まない実装は、これらのパラメーター位置を他の目的に使用してはなりません。
21.4.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
ECMA-402 Internationalization APIを含むECMAScript実装は、このメソッドをECMA-402仕様で指定されるとおりに実装しなければなりません。ECMAScript実装がECMA-402 APIを含まない場合、このメソッドについて以下の仕様が使用されます:
このメソッドはString値を返します。Stringの内容は実装定義ですが、ホスト環境の現在のロケールの慣習に対応する便利で人間が読める形式で、現在の時間帯における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 (Number、ただし NaN ではない) and returns 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(SPACE)、および "GMT" の文字列連結を返す。
21.4.4.41.2 DateString ( tv )
The abstract operation DateString takes argument tv (Number、ただし NaN ではない) and returns String. It performs the following steps when called:
weekday を、Number WeekDay (tv ) を持つ Table 60 内のエントリのNameとする。month を、Number MonthFromTime (tv ) を持つ Table 61 内のエントリのNameとする。day を ToZeroPaddedDecimalString (ℝ (DateFromTime (tv )), 2) とする。yv を YearFromTime (tv ) とする。yv が +0 𝔽 であるか、または yv > +0 𝔽 の場合、yearSign を空のStringとする。そうでない場合、yearSign を "-" とする。paddedYear を ToZeroPaddedDecimalString (abs (ℝ (yv )), 4) とする。weekday 、コード単位0x0020(SPACE)、month 、コード単位0x0020(SPACE)、day 、コード単位0x0020(SPACE)、yearSign 、および paddedYear の文字列連結を返す。
Table 60: 曜日名
Number
Name
+0 𝔽
"Sun"
1 𝔽
"Mon"
2 𝔽
"Tue"
3 𝔽
"Wed"
4 𝔽
"Thu"
5 𝔽
"Fri"
6 𝔽
"Sat"
Table 61: 年の月名
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 (整数Number) and returns 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 を、空のString、またはコード単位0x0020(SPACE)、コード単位0x0028(LEFT PARENTHESIS)、実装定義の時間帯名、およびコード単位0x0029(RIGHT PARENTHESIS)の文字列連結のいずれかである実装定義の文字列とする。offsetSign 、offsetHour 、offsetMin 、および tzName の文字列連結を返す。
21.4.4.41.4 ToDateString ( tv )
The abstract operation ToDateString takes argument tv (整数Numberまたは NaN ) and returns String. It performs the following steps when called:
tv が NaN の場合、"Invalid Date" を返す。t を LocalTime (tv ) とする。DateString (t )、コード単位0x0020(SPACE)、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 値に対応する時点を表すString値を返します。Stringの形式は、RFC 7231の"HTTP-date"に基づいており、ECMAScript Datesによってサポートされる時刻の全範囲をサポートするように一般化されています。
呼び出されたとき、次の手順を実行します:
dateObject をthis 値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 tv を dateObject .[[DateValue]] とする。tv が NaN の場合、"Invalid Date" を返す。weekday を、Number WeekDay (tv ) を持つ Table 60 内のエントリのNameとする。month を、Number MonthFromTime (tv ) を持つ Table 61 内のエントリのNameとする。day を ToZeroPaddedDecimalString (ℝ (DateFromTime (tv )), 2) とする。yv を YearFromTime (tv ) とする。yv が +0 𝔽 であるか、または 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 ( )
このメソッドは呼び出されたとき、次の手順を実行します:
dateObject をthis 値とする。? RequireInternalSlot (dateObject , [[DateValue]] ) を実行する。 dateObject .[[DateValue]] を返す。
21.4.4.45 Date.prototype [ %Symbol.toPrimitive% ] ( hint )
このメソッドは、Dateをプリミティブ値に変換するためにECMAScript言語演算子によって呼び出されます。hint に許される値は "default" 、"number" 、および "string" です。Dateは組み込みECMAScriptオブジェクトの中で一意であり、"default" を "string" と同等として扱います。他のすべての組み込み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]" です。