21 数値と日付 (Numbers and Dates)

21.1 Number オブジェクト

21.1.1 Number コンストラクタ

Number コンストラクタ:

  • %Number% である。
  • グローバルオブジェクト"Number" プロパティの初期値である。
  • コンストラクタとして呼び出されたとき新しい Number オブジェクトを生成し初期化する。
  • コンストラクタではなく関数として呼び出されたとき型変換を行う。
  • クラス定義の extends 節の値として使用できる。指定の Number 挙動を継承する意図を持つサブクラスコンストラクタは、[[NumberData]] 内部スロットを持つサブクラスインスタンスを生成および初期化するために Number コンストラクタへの super 呼び出しを含めなければならない。

21.1.1.1 Number ( value )

この関数は呼び出されたとき次の手順を実行する:

  1. value が存在するなら、
    1. prim を ? ToNumeric(value) とする。
    2. prim が BigInt なら n𝔽((prim)) とする。
    3. それ以外は nprim とする。
  2. それ以外なら、
    1. n+0𝔽 とする。
  3. NewTarget が undefined なら n を返す。
  4. O を ? OrdinaryCreateFromConstructor(NewTarget, "%Number.prototype%", « [[NumberData]] ») とする。
  5. O.[[NumberData]]n に設定する。
  6. O を返す。

21.1.2 Number コンストラクタのプロパティ

Number コンストラクタ:

  • %Function.prototype% を持つ [[Prototype]] 内部スロットを有する。
  • 以下のプロパティを持つ:

21.1.2.1 Number.EPSILON

Number.EPSILON の値は、1 と、Number 値として表現可能な 1 より大きい最小の値との差の大きさに相当する Number 値であり、これはおよそ 2.2204460492503130808472633361816 × 10-16 である。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.1.2.2 Number.isFinite ( number )

この関数は呼び出されたとき次を実行する:

  1. number が Number でなければ false を返す。
  2. number有限でなければ false を返す。
  3. それ以外なら true を返す。

21.1.2.3 Number.isInteger ( number )

この関数は呼び出されたとき次を実行する:

  1. number整数の Number なら true を返す。
  2. false を返す。

21.1.2.4 Number.isNaN ( number )

この関数は呼び出されたとき次を実行する:

  1. number が Number でなければ false を返す。
  2. numberNaN なら true を返す。
  3. それ以外は false を返す。
Note

この関数は、引数を NaN かどうか判定する前に Number へ変換しない点で、グローバルの isNaN 関数 (19.2.3) と異なる。

21.1.2.5 Number.isSafeInteger ( number )

Note

整数 n は、その Number 値が他のいかなる整数の Number 値とも一致しない場合に限り「安全な整数 (safe integer)」である。

この関数は呼び出されたとき次を実行する:

  1. number整数の Number なら、
    1. abs((number)) ≤ 253 - 1 なら true を返す。
  2. false を返す。

21.1.2.6 Number.MAX_SAFE_INTEGER

Note

IEEE 754-2019 の精度制限に起因する丸め挙動のため、Number.MAX_SAFE_INTEGER より大きいすべての整数の Number 値は少なくとも 1 つ別の整数と共有される。そのような大きな整数安全 ではなく、Number 値として正確に表現できる保証も、互いに区別できる保証もない。例えば 90071992547409929007199254740993 はどちらも Number 値 9007199254740992𝔽 になる。

Number.MAX_SAFE_INTEGER の値は 9007199254740991𝔽 (𝔽(253 - 1)) である。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.1.2.7 Number.MAX_VALUE

Number.MAX_VALUE の値は Number 型の正の有限値で最大のものであり、およそ 1.7976931348623157 × 10308 である。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.1.2.8 Number.MIN_SAFE_INTEGER

Note

IEEE 754-2019 の精度制限に起因する丸め挙動のため、Number.MIN_SAFE_INTEGER より小さいすべての整数の Number 値は少なくとも 1 つ別の整数と共有される。そのような大きな(絶対値が大きい)整数安全 ではなく、Number 値として正確に表現・相互識別できる保証はない。例えば -9007199254740992-9007199254740993 はどちらも Number 値 -9007199254740992𝔽 になる。

Number.MIN_SAFE_INTEGER の値は -9007199254740991𝔽 (𝔽(-(253 - 1))) である。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.1.2.9 Number.MIN_VALUE

Number.MIN_VALUE の値は Number 型の最小の正の値であり、およそ 5 × 10-324 である。

IEEE 754-2019 倍精度の 2 進表現において最小値は非正規化数である。実装が非正規化数をサポートしない場合、Number.MIN_VALUE の値はその実装で実際に表現可能な最小の非ゼロ正値でなければならない。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.1.2.10 Number.NaN

Number.NaN の値は NaN である。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.1.2.11 Number.NEGATIVE_INFINITY

Number.NEGATIVE_INFINITY の値は -∞𝔽 である。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.1.2.12 Number.parseFloat ( string )

"parseFloat" プロパティの初期値は %parseFloat% である。

21.1.2.13 Number.parseInt ( string, radix )

"parseInt" プロパティの初期値は %parseInt% である。

21.1.2.14 Number.POSITIVE_INFINITY

Number.POSITIVE_INFINITY の値は +∞𝔽 である。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.1.2.15 Number.prototype

Number.prototype の初期値は Number プロトタイプオブジェクトである。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.1.3 Number プロトタイプオブジェクトのプロパティ

Number プロトタイプオブジェクト:

  • %Number.prototype% である。
  • 通常オブジェクトである。
  • それ自体が Number オブジェクトであり、値 +0𝔽 を持つ [[NumberData]] 内部スロットを持つ。
  • %Object.prototype% を持つ [[Prototype]] 内部スロットを有する。

明示的に別段の記述がない限り、以下で定義される Number プロトタイプオブジェクトのメソッドはジェネリックではなく、それらに渡される this 値は Number 値か、Number 値で初期化された [[NumberData]] 内部スロットを持つオブジェクトでなければならない。

メソッド仕様内の語句 “this Number value” は、メソッド呼び出しの this 値を引数として抽象操作 ThisNumberValue を呼び出した結果を指す。

21.1.3.1 Number.prototype.constructor

Number.prototype.constructor の初期値は %Number% である。

21.1.3.2 Number.prototype.toExponential ( fractionDigits )

このメソッドは、この Number 値を 10 進指数表記で仮数部の小数点前 1 桁およびその後に fractionDigits 桁の仮数部桁を伴う形で表現した文字列を返す。fractionDigitsundefined の場合、Number を一意に特定するために必要な仮数桁数(常に指数表記)を含める(ToString と同様だが常に指数表記で出力される点が異なる)。

呼び出されたとき次を実行する:

  1. x を ? ThisNumberValue(this value) とする。
  2. f を ? ToIntegerOrInfinity(fractionDigits) とする。
  3. Assert: fractionDigitsundefined なら f は 0。
  4. x有限でなければ Number::toString(x, 10) を返す。
  5. f < 0 または f > 100 なら RangeError 例外。
  6. x(x) に設定。
  7. s を空文字列とする。
  8. x < 0 なら
    1. s"-" に設定。
    2. x を -x に設定。
  9. x = 0 なら
    1. mf + 1 個のコード単位 0x0030 (DIGIT ZERO) からなる文字列とする。
    2. e を 0 とする。
  10. それ以外
    1. fractionDigitsundefined でなければ
      1. 10fn < 10f + 1 かつ n × 10e - f - x がゼロに最も近くなるような整数 e, n をとる。複数あるなら n × 10e - f が大きい方。
    2. それ以外
      1. ff ≥ 0, 10ffn < 10ff + 1, 𝔽(n × 10e - ff) が 𝔽(x) に等しく、ff が最小となる整数 e, n, ff をとる。n の 10 進表記は ff + 1 桁で 0 で割り切れない(最下位桁は一意とは限らない)。
      2. fff に設定。
    3. mn の 10 進表記の桁(先頭 0 なし)からなる文字列とする。
  11. f ≠ 0 なら
    1. am の最初のコード単位。
    2. b を残りの f 個のコード単位。
    3. ma, ".", b の連結に設定。
  12. e = 0 なら
    1. c"+" とする。
    2. d"0" とする。
  13. それ以外
    1. e > 0 なら
      1. c"+" とする。
    2. それ以外
      1. Assert: e < 0。
      2. c"-" とする。
      3. e を -e に設定。
    3. de の 10 進表記(先頭 0 なし)からなる文字列とする。
  14. mm, "e", c, d の連結に設定。
  15. sm の連結を返す。
Note

上記規則より高精度な変換を提供する実装では、手順 10.b.i の代替指針として以下を推奨する:

  1. f ≥ 0, 10fn < 10f + 1, 𝔽(n × 10e - f) が 𝔽(x) に等しく、f が最小となる整数 e, n, f をとる。n の候補が複数ある場合、𝔽(n × 10e - f) が 𝔽(x) に最も近いものを選び、2 つあるなら偶数を選ぶ。

21.1.3.3 Number.prototype.toFixed ( fractionDigits )

Note 1

このメソッドは、この Number 値を 10 進固定小数点表記で小数点以下に fractionDigits 桁を含む文字列を返す。fractionDigitsundefined の場合 0 を仮定する。

呼び出されたとき次を実行する:

  1. x を ? ThisNumberValue(this value) とする。
  2. f を ? ToIntegerOrInfinity(fractionDigits) とする。
  3. Assert: fractionDigitsundefined なら f は 0。
  4. f有限でなければ RangeError
  5. f < 0 または f > 100 なら RangeError
  6. x有限でなければ Number::toString(x, 10) を返す。
  7. x(x) に設定。
  8. s を空文字列とする。
  9. x < 0 なら
    1. s"-" に設定。
    2. x を -x に設定。
  10. x ≥ 1021 なら
    1. m を ! ToString(𝔽(x)) とする。
  11. それ以外
    1. nn / 10f - x が 0 に最も近くなる整数とする(2 つあれば大きい方)。
    2. n = 0 なら m = "0"、そうでなければ mn の 10 進表記(先頭 0 なし)の桁列とする。
    3. f ≠ 0 なら
      1. km の長さとする。
      2. kf なら
        1. zf + 1 - k 個の 0x0030 からなる文字列とする。
        2. mz + m に設定。
        3. kf + 1 に設定。
      3. am の先頭 k - f 文字。
      4. b を残りの f 文字。
      5. ma, ".", b の連結に設定。
  12. s + m を返す。
Note 2

toFixed の出力は、ある値について toString より精密になる場合がある。toString は隣接する Number 値と区別するのに十分な有効桁のみを出力するためである。例:

(1000000000000000128).toString()"1000000000000000100" を返す一方、
(1000000000000000128).toFixed(0)"1000000000000000128" を返す。

21.1.3.4 Number.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 国際化 API を含む ECMAScript 実装は ECMA-402 仕様に従ってこのメソッドを実装しなければならない。ECMA-402 API を含まない実装では以下の仕様が用いられる:

このメソッドは、この Number 値をホスト環境の現在のロケール規約に従って書式化した文字列を生成する。このメソッドは実装定義であり、toString と同じものを返すことは許容されるが推奨はされない。

このメソッドのオプション引数の意味は ECMA-402 仕様で定義される; ECMA-402 をサポートしない実装はこれらの位置を他目的に使用してはならない。

21.1.3.5 Number.prototype.toPrecision ( precision )

このメソッドは、この Number 値を、仮数部の小数点前 1 桁および precision - 1 桁を小数点後に持つ 10 進指数表記、または precision 個の有効桁を持つ 10 進固定表記で表現した文字列を返す。precisionundefined の場合は代わりに ToString を呼び出す。

呼び出されたとき次を実行する:

  1. x を ? ThisNumberValue(this value) とする。
  2. precisionundefined なら ! ToString(x) を返す。
  3. p を ? ToIntegerOrInfinity(precision) とする。
  4. x有限でなければ Number::toString(x, 10) を返す。
  5. p < 1 または p > 100 なら RangeError
  6. x(x) に設定。
  7. s を空文字列とする。
  8. x < 0 なら
    1. s をコード単位 0x002D (HYPHEN-MINUS) に設定。
    2. x を -x に設定。
  9. x = 0 なら
    1. mp 個の 0x0030 (DIGIT ZERO) からなる文字列とする。
    2. e を 0 とする。
  10. それ以外
    1. 10p - 1n < 10p かつ n × 10e - p + 1 - x が 0 に最も近い整数 e, n をとる(複数あるなら積が大きい方)。
    2. mn の 10 進表記桁列(先頭 0 なし)とする。
    3. e < -6 または ep なら
      1. Assert: e ≠ 0。
      2. p ≠ 1 なら
        1. am の最初のコード単位。
        2. b を残りの p - 1 文字。
        3. ma, ".", b の連結に設定。
      3. e > 0 なら
        1. c をコード単位 0x002B (PLUS SIGN) とする。
      4. それ以外
        1. Assert: e < 0。
        2. c をコード単位 0x002D (HYPHEN-MINUS) とする。
        3. e を -e に設定。
      5. de の 10 進表記(先頭 0 なし)文字列とする。
      6. s, m, コード単位 0x0065 ('e'), c, d の連結を返す。
  11. e = p - 1 なら s + m を返す。
  12. e ≥ 0 なら
    1. m を 先頭 e + 1 文字, コード単位 0x002E (FULL STOP), 残り p - (e + 1) 文字 の連結に設定。
  13. それ以外
    1. m を コード単位 0x0030, コード単位 0x002E, -(e + 1) 個の 0x0030, 文字列 m の連結に設定。
  14. s + m を返す。

21.1.3.6 Number.prototype.toString ( [ radix ] )

Note

オプションの radix2𝔽 から 36𝔽 までの整数 Number 値であるべきである。radixundefined の場合 radix の値として 10𝔽 が用いられる。

このメソッドは呼び出されたとき次を実行する:

  1. x を ? ThisNumberValue(this value) とする。
  2. radixundefined なら radixMV = 10。
  3. それ以外は radixMV = ? ToIntegerOrInfinity(radix)。
  4. radixMV が 2 から 36 の範囲外なら RangeError
  5. Number::toString(x, radixMV) を返す。

このメソッドはジェネリックではなく、this 値が Number または Number オブジェクトでない場合 TypeError を投げる。したがって他種オブジェクトに転用できない。

このメソッドの "length" プロパティは 1𝔽 である。

21.1.3.7 Number.prototype.valueOf ( )

  1. ThisNumberValue(this value) を返す。

21.1.3.7.1 ThisNumberValue ( value )

The abstract operation ThisNumberValue takes argument value (ECMAScript 言語値) and returns Number を含む通常完了または throw completion. It performs the following steps when called:

  1. value が Number なら value を返す。
  2. value が Object で [[NumberData]] 内部スロットを持つなら
    1. nvalue.[[NumberData]] とする。
    2. Assert: n は Number。
    3. n を返す。
  3. TypeError 例外を投げる。

21.1.4 Number インスタンスのプロパティ

Number インスタンスは Number プロトタイプオブジェクトからプロパティを継承する通常オブジェクトである。Number インスタンスは [[NumberData]] 内部スロットも持つ。[[NumberData]] 内部スロットはこの Number オブジェクトが表す Number 値である。

21.2 BigInt オブジェクト

21.2.1 BigInt コンストラクタ

BigInt コンストラクタ:

  • %BigInt% である。
  • グローバルオブジェクト"BigInt" プロパティの初期値である。
  • コンストラクタではなく関数として呼び出されたとき型変換を行う。
  • new 演算子で使用することやサブクラス化することを意図しない。クラス定義の extends 節の値として使用することはできるが、BigInt コンストラクタへの super 呼び出しは例外を引き起こす。

21.2.1.1 BigInt ( value )

この関数は呼び出されたとき次の手順を実行する:

  1. NewTarget が undefined でなければ TypeError 例外を投げる。
  2. prim を ? ToPrimitive(value, number) とする。
  3. prim が Number なら ? NumberToBigInt(prim) を返す。
  4. それ以外なら ? ToBigInt(prim) を返す。

21.2.1.1.1 NumberToBigInt ( number )

The abstract operation NumberToBigInt takes argument number (a Number) and returns either a normal completion containing a BigInt or a throw completion. It performs the following steps when called:

  1. number整数の Number でなければ RangeError 例外を投げる。
  2. ((number)) を返す。

21.2.2 BigInt コンストラクタのプロパティ

BigInt コンストラクタ:

  • [[Prototype]] 内部スロットの値が %Function.prototype% である。
  • 次のプロパティを持つ:

21.2.2.1 BigInt.asIntN ( bits, bigint )

この関数は呼び出されたとき次を実行する:

  1. bits を ? ToIndex(bits) に設定する。
  2. bigint を ? ToBigInt(bigint) に設定する。
  3. mod(bigint) modulo 2bits とする。
  4. もし mod ≥ 2bits - 1 なら (mod - 2bits) を返す; そうでなければ (mod) を返す。

21.2.2.2 BigInt.asUintN ( bits, bigint )

この関数は呼び出されたとき次を実行する:

  1. bits を ? ToIndex(bits) に設定する。
  2. bigint を ? ToBigInt(bigint) に設定する。
  3. ((bigint) modulo 2bits) を返す。

21.2.2.3 BigInt.prototype

BigInt.prototype の初期値は BigInt プロトタイプオブジェクトである。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.2.3 BigInt プロトタイプオブジェクトのプロパティ

BigInt プロトタイプオブジェクト:

  • %BigInt.prototype% である。
  • 通常オブジェクトである。
  • BigInt オブジェクトではない([[BigIntData]] 内部スロットを持たない)。
  • [[Prototype]] 内部スロットの値は %Object.prototype% である。

メソッド仕様内の語句 “this BigInt value” は、そのメソッド呼び出しの this 値を引数として抽象操作 ThisBigIntValue を呼び出した結果を指す。

21.2.3.1 BigInt.prototype.constructor

BigInt.prototype.constructor の初期値は %BigInt% である。

21.2.3.2 BigInt.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 国際化 API を含む ECMAScript 実装は、このメソッドを ECMA-402 仕様に従って実装しなければならない。ECMA-402 API を含まない実装では以下の仕様が用いられる:

このメソッドは、この BigInt 値をホスト環境の現在のロケール規約に従って書式化した文字列値を生成する。実装定義であり、toString と同じものを返すことも許容されるが推奨されない。

このメソッドのオプション引数の意味は ECMA-402 仕様で定義される;ECMA-402 をサポートしない実装はこれらの位置を他用途に用いてはならない。

21.2.3.3 BigInt.prototype.toString ( [ radix ] )

Note

オプションの radix2𝔽 から 36𝔽 までの整数 Number 値であるべきである。radixundefined なら 10𝔽 が用いられる。

このメソッドは呼び出されたとき次を実行する:

  1. x を ? ThisBigIntValue(this value) とする。
  2. radixundefined なら radixMV を 10 とする。
  3. それ以外なら radixMV を ? ToIntegerOrInfinity(radix) とする。
  4. radixMV が 2 から 36 の包含区間にないなら RangeError 例外を投げる。
  5. BigInt::toString(x, radixMV) を返す。

このメソッドはジェネリックではなく、this 値が BigInt でも BigInt オブジェクトでもない場合 TypeError 例外を投げる。したがって他種類のオブジェクトへ移してメソッドとして使用できない。

21.2.3.4 BigInt.prototype.valueOf ( )

  1. ThisBigIntValue(this value) を返す。

21.2.3.4.1 ThisBigIntValue ( value )

The abstract operation ThisBigIntValue takes argument value (an ECMAScript language value) and returns either a normal completion containing a BigInt or a throw completion. It performs the following steps when called:

  1. value が BigInt なら value を返す。
  2. value が Object で [[BigIntData]] 内部スロットを持つなら
    1. Assert: value.[[BigIntData]] は BigInt である。
    2. value.[[BigIntData]] を返す。
  3. TypeError 例外を投げる。

21.2.3.5 BigInt.prototype [ %Symbol.toStringTag% ]

%Symbol.toStringTag% プロパティの初期値は文字列 "BigInt" である。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } を持つ。

21.2.4 BigInt インスタンスのプロパティ

BigInt インスタンスは BigInt プロトタイプオブジェクトからプロパティを継承する通常オブジェクトである。BigInt インスタンスは [[BigIntData]] 内部スロットも持つ。[[BigIntData]] 内部スロットはその BigInt オブジェクトが表す BigInt 値である。

21.3 Math オブジェクト

Math オブジェクト:

Note

本仕様において語句 “the Number value for x” は 6.1.6.1 で定義される技術的意味を持つ。

21.3.1 Math オブジェクトの値プロパティ

21.3.1.1 Math.E

自然対数の底 e の Number 値(およそ 2.7182818284590452354)。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.3.1.2 Math.LN10

10 の自然対数の Number 値(およそ 2.302585092994046)。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.3.1.3 Math.LN2

2 の自然対数の Number 値(およそ 0.6931471805599453)。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.3.1.4 Math.LOG10E

自然対数の底 e の常用対数(底10)の Number 値(およそ 0.4342944819032518)。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

Note

Math.LOG10E の値はおよそ Math.LN10 の逆数である。

21.3.1.5 Math.LOG2E

自然対数の底 e の底2対数の Number 値(およそ 1.4426950408889634)。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

Note

Math.LOG2E の値はおよそ Math.LN2 の逆数である。

21.3.1.6 Math.PI

円周率 π(円の周長と直径の比)の Number 値(およそ 3.1415926535897932)。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.3.1.7 Math.SQRT1_2

1/2 の平方根の Number 値(およそ 0.7071067811865476)。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

Note

Math.SQRT1_2 の値はおよそ Math.SQRT2 の逆数である。

21.3.1.8 Math.SQRT2

2 の平方根の Number 値(およそ 1.4142135623730951)。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

21.3.1.9 Math [ %Symbol.toStringTag% ]

%Symbol.toStringTag% プロパティの初期値は文字列 "Math" である。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } を持つ。

21.3.2 Math オブジェクトの関数プロパティ

Note

acos, acosh, asin, asinh, atan, atanh, atan2, cbrt, cos, cosh, exp, expm1, hypot, log, log1p, log2, log10, pow, random, sin, sinh, tan, tanh の各関数の動作は、特定の境界的引数値に対する結果を要求する点を除きここでは厳密には規定されない。他の引数値に対しては、これらの関数は周知の数学関数の結果を近似することを意図するが、近似アルゴリズムの選択には一定の裁量が許される。目的は、実装者があるハードウェアプラットフォームにおいて C 言語プログラマが利用できる数学ライブラリを ECMAScript でも利用できるようにすることである。

アルゴリズム選択は実装に委ねられるが(規格では規定しない)、Sun Microsystems の自由配布数学ライブラリ fdlibmhttp://www.netlib.org/fdlibm)に含まれる IEEE 754-2019 演算用近似アルゴリズムを用いることが推奨される。

21.3.2.1 Math.abs ( x )

この関数は x の絶対値を返す。結果は x と同じ大きさで正の符号を持つ。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN なら NaN を返す。
  3. n-0𝔽 なら +0𝔽 を返す。
  4. n-∞𝔽 なら +∞𝔽 を返す。
  5. n < -0𝔽 なら -n を返す。
  6. n を返す。

21.3.2.2 Math.acos ( x )

この関数は x の逆余弦を返す。結果はラジアンで +0𝔽 から 𝔽(π) の包含区間内にある。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN または n > 1𝔽 または n < -1𝔽 なら NaN を返す。
  3. n1𝔽 なら +0𝔽 を返す。
  4. (n) の逆余弦を表す実装近似 Number 値を返す。

21.3.2.3 Math.acosh ( x )

この関数は x の逆双曲線余弦を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN または +∞𝔽 なら n を返す。
  3. n1𝔽 なら +0𝔽 を返す。
  4. n < 1𝔽 なら NaN を返す。
  5. (n) の逆双曲線余弦を表す実装近似 Number 値を返す。

21.3.2.4 Math.asin ( x )

この関数は x の逆正弦を返す。結果はラジアンで 𝔽(-π / 2) から 𝔽(π / 2) の包含区間内。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN, +0𝔽, -0𝔽 のいずれかなら n を返す。
  3. n > 1𝔽 または n < -1𝔽 なら NaN を返す。
  4. (n) の逆正弦を表す実装近似 Number 値を返す。

21.3.2.5 Math.asinh ( x )

この関数は x の逆双曲線正弦を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. n有限でないか、_n_+0𝔽 または -0𝔽 の場合 n を返す。
  3. (n) の逆双曲線正弦を表す実装近似 Number 値を返す。

21.3.2.6 Math.atan ( x )

この関数は x の逆正接を返す。結果はラジアンで 𝔽(-π / 2) から 𝔽(π / 2) の包含区間内。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN, +0𝔽, -0𝔽 のいずれかなら n を返す。
  3. n+∞𝔽 なら π / 2 を表す実装近似 Number 値を返す。
  4. n-∞𝔽 なら -π / 2 を表す実装近似 Number 値を返す。
  5. (n) の逆正接を表す実装近似 Number 値を返す。

21.3.2.7 Math.atanh ( x )

この関数は x の逆双曲線正接を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN, +0𝔽, -0𝔽 のいずれかなら n を返す。
  3. n > 1𝔽 または n < -1𝔽 なら NaN を返す。
  4. n1𝔽 なら +∞𝔽 を返す。
  5. n-1𝔽 なら -∞𝔽 を返す。
  6. (n) の逆双曲線正接を表す実装近似 Number 値を返す。

21.3.2.8 Math.atan2 ( y, x )

この関数は引数 yx の商 y / x の逆正接を返し、yx の符号で象限を決定する。2 引数逆正接関数において第 1 引数名が y、第 2 引数名が x であるのは慣習的意図的仕様である。結果はラジアンで -π から +π の包含区間内。

呼び出されたとき次を実行する:

  1. ny を ? ToNumber(y) とする。
  2. nx を ? ToNumber(x) とする。
  3. nyNaNnxNaN なら NaN を返す。
  4. ny+∞𝔽 のとき
    1. nx+∞𝔽 なら π / 4 を表す実装近似 Number 値を返す。
    2. nx-∞𝔽 なら 3π / 4 を表す実装近似 Number 値を返す。
    3. π / 2 を表す実装近似 Number 値を返す。
  5. ny-∞𝔽 のとき
    1. nx+∞𝔽 なら -π / 4 を表す実装近似 Number 値を返す。
    2. nx-∞𝔽 なら -3π / 4 を表す実装近似 Number 値を返す。
    3. -π / 2 を表す実装近似 Number 値を返す。
  6. ny+0𝔽 のとき
    1. nx > +0𝔽 または nx+0𝔽 なら +0𝔽 を返す。
    2. π を表す実装近似 Number 値を返す。
  7. ny-0𝔽 のとき
    1. nx > +0𝔽 または nx+0𝔽 なら -0𝔽 を返す。
    2. -π を表す実装近似 Number 値を返す。
  8. Assert: ny有限+0𝔽 でも -0𝔽 でもない。
  9. ny > +0𝔽 のとき
    1. nx+∞𝔽 なら +0𝔽 を返す。
    2. nx-∞𝔽 なら π を表す実装近似 Number 値を返す。
    3. nx+0𝔽 または -0𝔽 なら π / 2 を表す実装近似 Number 値を返す。
  10. ny < -0𝔽 のとき
    1. nx+∞𝔽 なら -0𝔽 を返す。
    2. nx-∞𝔽 なら -π を表す実装近似 Number 値を返す。
    3. nx+0𝔽 または -0𝔽 なら -π / 2 を表す実装近似 Number 値を返す。
  11. Assert: nx有限+0𝔽 でも -0𝔽 でもない。
  12. rabs((ny) / (nx)) の逆正接とする。
  13. nx < -0𝔽 のとき
    1. ny > +0𝔽 なら r を π - r に設定。
    2. それ以外は r を -π + r に設定。
  14. それ以外 (nx-0𝔽) のとき
    1. ny < -0𝔽 なら r を -r に設定。
  15. r を表す実装近似 Number 値を返す。

21.3.2.9 Math.cbrt ( x )

この関数は x の立方根を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. n有限でないか _n_+0𝔽 または -0𝔽 なら n を返す。
  3. (n) の立方根を表す実装近似 Number 値を返す。

21.3.2.10 Math.ceil ( x )

この関数は x 以上で最も小さい(-∞ に最も近い)整数 Number 値を返す。x が既に整数なら結果は x である。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. n有限でないか _n_+0𝔽 または -0𝔽 なら n を返す。
  3. n < -0𝔽 かつ n > -1𝔽 なら -0𝔽 を返す。
  4. n整数の Number なら n を返す。
  5. n 以上で最小の整数 Number 値(-∞ に最も近い)を返す。
Note

Math.ceil(x) の値は -Math.floor(-x) の値と同じである。

21.3.2.11 Math.clz32 ( x )

この関数は呼び出されたとき次を実行する:

  1. n を ? ToUint32(x) とする。
  2. pn の 32 ビット符号なし 2 進表現における先頭の 0 ビット数とする。
  3. 𝔽(p) を返す。
Note

n+0𝔽 または -0𝔽 の場合このメソッドは 32𝔽 を返す。n の 32 ビット表現の最上位ビットが 1 の場合、このメソッドは +0𝔽 を返す。

21.3.2.12 Math.cos ( x )

この関数は x の余弦を返す。引数はラジアン。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. n有限でないなら NaN を返す。
  3. n+0𝔽 または -0𝔽 なら 1𝔽 を返す。
  4. (n) の余弦を表す実装近似 Number 値を返す。

21.3.2.13 Math.cosh ( x )

この関数は x の双曲線余弦を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN なら NaN を返す。
  3. n+∞𝔽 または -∞𝔽 なら +∞𝔽 を返す。
  4. n+0𝔽 または -0𝔽 なら 1𝔽 を返す。
  5. (n) の双曲線余弦を表す実装近似 Number 値を返す。
Note

Math.cosh(x) の値は (Math.exp(x) + Math.exp(-x)) / 2 と同じである。

21.3.2.14 Math.exp ( x )

この関数は x の指数関数(自然対数の底 ex 乗)を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN または +∞𝔽 なら n を返す。
  3. n+0𝔽 または -0𝔽 なら 1𝔽 を返す。
  4. n-∞𝔽 なら +0𝔽 を返す。
  5. (n) の指数関数を表す実装近似 Number 値を返す。

21.3.2.15 Math.expm1 ( x )

この関数は x の指数関数から 1 を引いた結果を返す。x が 0 に近い場合でも精度を保つ方法で計算される。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN, +0𝔽, -0𝔽, +∞𝔽 のいずれかなら n を返す。
  3. n-∞𝔽 なら -1𝔽 を返す。
  4. exp(n) の指数関数とする。
  5. exp - 1 を表す実装近似 Number 値を返す。

21.3.2.16 Math.floor ( x )

この関数は x 以下で最大(+∞ に最も近い)の整数 Number 値を返す。x が既に整数なら結果は x

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. n有限でないか _n_+0𝔽 または -0𝔽 なら n を返す。
  3. n < 1𝔽 かつ n > +0𝔽 なら +0𝔽 を返す。
  4. n整数 Number なら n を返す。
  5. n 以下で最大の整数 Number 値(+∞ に最も近い)を返す。
Note

Math.floor(x) の値は -Math.ceil(-x) の値と同じである。

21.3.2.17 Math.fround ( x )

この関数は呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN なら NaN を返す。
  3. n+0𝔽, -0𝔽, +∞𝔽, -∞𝔽 のいずれかなら n を返す。
  4. n32n を丸めモード roundTiesToEven で IEEE 754-2019 binary32 形式に変換した結果とする。
  5. n64n32IEEE 754-2019 binary64 形式に変換した結果とする。
  6. n64 に対応する ECMAScript Number 値を返す。

21.3.2.18 Math.f16round ( x )

この関数は呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN なら NaN を返す。
  3. n+0𝔽, -0𝔽, +∞𝔽, -∞𝔽 のいずれかなら n を返す。
  4. n16n を丸めモード roundTiesToEven で IEEE 754-2019 binary16 形式に変換した結果とする。
  5. n64n16IEEE 754-2019 binary64 形式に変換した結果とする。
  6. n64 に対応する ECMAScript Number 値を返す。
Note

この操作は double-rounding の可能性があるため binary32 へ変換後 binary16 へ変換するのと同じではない。例として k = 1.00048828125000022204𝔽 では Math.f16round(k) は 1.0009765625𝔽 だが Math.f16round(Math.fround(k)) は 1𝔽 となる。

全てのプラットフォームが binary64 から binary16 へのネイティブ変換を提供するわけではない。MIT ライセンスの half ライブラリ等で可能である。別案として、まず roundTiesToEven で binary64 から binary32 に変換し、結果が誤った二重丸めを生む可能性があるか検査できる。該当する場合 binary32 値の仮数を roundTiesToOdd で初期変換した場合に得られる値に調整し、その調整値を binary16 に roundTiesToEven で変換することで正しい値を得られる。

21.3.2.19 Math.hypot ( ...args )

0 個以上の引数について、それらの二乗和の平方根を返す。

呼び出されたとき次を実行する:

  1. coerced を新しい空リストとする。
  2. args の各要素 arg について
    1. n を ? ToNumber(arg) とする。
    2. ncoerced に追加。
  3. coerced の各要素 number について
    1. number+∞𝔽 または -∞𝔽 なら +∞𝔽 を返す。
  4. onlyZerotrue とする。
  5. coerced の各要素 number について
    1. numberNaN なら NaN を返す。
    2. number+0𝔽 でも -0𝔽 でもなければ onlyZerofalse に設定。
  6. onlyZerotrue なら +0𝔽 を返す。
  7. coerced の要素の数学的値の二乗和の平方根を表す実装近似 Number 値を返す。

この関数の "length" プロパティは 2𝔽 である。

Note

複数引数で呼ばれる際のオーバーフローやアンダーフローによる精度損失を避けるよう配慮すべきである。

21.3.2.20 Math.imul ( x, y )

この関数は呼び出されたとき次を実行する:

  1. a(? ToUint32(x)) とする。
  2. b(? ToUint32(y)) とする。
  3. product を (a × b) modulo 232 とする。
  4. product ≥ 231 なら 𝔽(product - 232) を返す; そうでなければ 𝔽(product) を返す。

21.3.2.21 Math.log ( x )

この関数は x の自然対数を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN または +∞𝔽 なら n を返す。
  3. n1𝔽 なら +0𝔽 を返す。
  4. n+0𝔽 または -0𝔽 なら -∞𝔽 を返す。
  5. n < -0𝔽 なら NaN を返す。
  6. (n) の自然対数を表す実装近似 Number 値を返す。

21.3.2.22 Math.log1p ( x )

この関数は 1 + x の自然対数を返す。x が 0 に近い場合も精度良く計算される。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN, +0𝔽, -0𝔽, +∞𝔽 のいずれかなら n を返す。
  3. n-1𝔽 なら -∞𝔽 を返す。
  4. n < -1𝔽 なら NaN を返す。
  5. 1 + (n) の自然対数を表す実装近似 Number 値を返す。

21.3.2.23 Math.log10 ( x )

この関数は x の常用対数(底 10)を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN または +∞𝔽 なら n を返す。
  3. n1𝔽 なら +0𝔽 を返す。
  4. n+0𝔽 または -0𝔽 なら -∞𝔽 を返す。
  5. n < -0𝔽 なら NaN を返す。
  6. (n) の常用対数を表す実装近似 Number 値を返す。

21.3.2.24 Math.log2 ( x )

この関数は x の底 2 対数を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN または +∞𝔽 なら n を返す。
  3. n1𝔽 なら +0𝔽 を返す。
  4. n+0𝔽 または -0𝔽 なら -∞𝔽 を返す。
  5. n < -0𝔽 なら NaN を返す。
  6. (n) の底 2 対数を表す実装近似 Number 値を返す。

21.3.2.25 Math.max ( ...args )

0 個以上の引数について、各引数に ToNumber を適用し最大の値を返す。

呼び出されたとき次を実行する:

  1. coerced を新しい空リストとする。
  2. args の各要素 arg について
    1. n を ? ToNumber(arg) とする。
    2. ncoerced に追加。
  3. highest-∞𝔽 とする。
  4. coerced の各要素 number について
    1. numberNaN なら NaN を返す。
    2. number+0𝔽 かつ highest-0𝔽 なら highest+0𝔽 に設定。
    3. number > highest なら highestnumber に設定。
  5. highest を返す。
Note

最大値判定の比較は IsLessThan アルゴリズムを用いるが、+0𝔽-0𝔽 より大きいと見なす点が異なる。

この関数の "length" プロパティは 2𝔽 である。

21.3.2.26 Math.min ( ...args )

0 個以上の引数について、各引数に ToNumber を適用し最小の値を返す。

呼び出されたとき次を実行する:

  1. coerced を新しい空リストとする。
  2. args の各要素 arg について
    1. n を ? ToNumber(arg) とする。
    2. ncoerced に追加。
  3. lowest+∞𝔽 とする。
  4. coerced の各要素 number について
    1. numberNaN なら NaN を返す。
    2. number-0𝔽 かつ lowest+0𝔽 なら lowest-0𝔽 に設定。
    3. number < lowest なら lowestnumber に設定。
  5. lowest を返す。
Note

最大値判定と同様、比較は IsLessThan に準じるが +0𝔽-0𝔽 より大きいと見なす。

この関数の "length" プロパティは 2𝔽 である。

21.3.2.27 Math.pow ( base, exponent )

この関数は呼び出されたとき次を実行する:

  1. base を ? ToNumber(base) に設定。
  2. exponent を ? ToNumber(exponent) に設定。
  3. Number::exponentiate(base, exponent) を返す。

21.3.2.28 Math.random ( )

この関数は符号正で +0𝔽 以上 1𝔽 未満の Number 値を、その範囲にほぼ一様な分布で(実装定義のアルゴリズムまたは戦略を用いて)ランダムまたは疑似ランダムに返す。

異なるレルムで生成された各 Math.random 関数は、連続呼び出しで異なる値列を生成しなければならない。

21.3.2.29 Math.round ( x )

この関数は x に最も近い整数の Number 値を返す。2 つの整数が同じ距離の場合 +∞ に近い方を返す。x が既に整数なら結果は x

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. n有限でないか n整数 Number なら n を返す。
  3. n < 0.5𝔽 かつ n > +0𝔽 なら +0𝔽 を返す。
  4. n < -0𝔽 かつ n-0.5𝔽 なら -0𝔽 を返す。
  5. n に最も近い整数 Number を返す(距離が同じ場合は +∞ に近い方)。
Note 1

Math.round(3.5) は 4 を返すが Math.round(-3.5) は -3 を返す。

Note 2

Math.round(x) の値は常に Math.floor(x + 0.5) の値と同じではない。x-0𝔽 または -0𝔽 より小さく -0.5𝔽 以上のとき Math.round(x)-0𝔽 を返すが Math.floor(x + 0.5)+0𝔽 を返す。また x + 0.5 の内部丸めにより差異が生じる場合がある。

21.3.2.30 Math.sign ( x )

この関数は x の符号(正/負/ゼロ)を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN, +0𝔽, -0𝔽 のいずれかなら n を返す。
  3. n < -0𝔽 なら -1𝔽 を返す。
  4. 1𝔽 を返す。

21.3.2.31 Math.sin ( x )

この関数は x の正弦を返す。引数はラジアン。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN, +0𝔽, -0𝔽 のいずれかなら n を返す。
  3. n+∞𝔽 または -∞𝔽 なら NaN を返す。
  4. (n) の正弦を表す実装近似 Number 値を返す。

21.3.2.32 Math.sinh ( x )

この関数は x の双曲線正弦を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. n有限でないか _n_+0𝔽 または -0𝔽 なら n を返す。
  3. (n) の双曲線正弦を表す実装近似 Number 値を返す。
Note

Math.sinh(x) の値は (Math.exp(x) - Math.exp(-x)) / 2 と同じである。

21.3.2.33 Math.sqrt ( x )

この関数は x の平方根を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN, +0𝔽, -0𝔽, +∞𝔽 のいずれかなら n を返す。
  3. n < -0𝔽 なら NaN を返す。
  4. 𝔽((n) の平方根) を返す。

21.3.2.34 Math.sumPrecise ( items )

Number の iterable が与えられたとき、その各値を加算し合計を返す。任意の値が Number でなければ TypeError 例外を投げる。

呼び出されたとき次を実行する:

  1. RequireObjectCoercible(items) を実行。
  2. iteratorRecord を ? GetIterator(items, sync) とする。
  3. stateminus-zero とする。
  4. sum を 0 とする。
  5. count を 0 とする。
  6. nextnot-started とする。
  7. nextdone でない間繰り返す
    1. next を ? IteratorStepValue(iteratorRecord) とする。
    2. nextdone でなければ
      1. count ≥ 253 - 1 なら
        1. 注: この段階に到達することは実用上想定されず、実装が「合理的なサイズ」の入力を仮定できるようにするためのみ存在する。
        2. errorThrowCompletion(新たに生成した RangeError オブジェクト) とする。
        3. IteratorClose(iteratorRecord, error) を返す。
      2. next が Number でなければ
        1. errorThrowCompletion(新たに生成した TypeError オブジェクト) とする。
        2. IteratorClose(iteratorRecord, error) を返す。
      3. nnext とする。
      4. statenot-a-number でないなら
        1. nNaN なら
          1. statenot-a-number に設定。
        2. Else if n+∞𝔽 なら
          1. stateminus-infinity なら statenot-a-number に設定。
          2. Else stateplus-infinity に設定。
        3. Else if n-∞𝔽 なら
          1. stateplus-infinity なら statenot-a-number に設定。
          2. Else stateminus-infinity に設定。
        4. Else if n-0𝔽 でなく、stateminus-zero または finite なら
          1. statefinite に設定。
          2. sumsum + (n) に設定。
      5. countcount + 1 に設定。
  8. statenot-a-number なら NaN を返す。
  9. stateplus-infinity なら +∞𝔽 を返す。
  10. stateminus-infinity なら -∞𝔽 を返す。
  11. stateminus-zero なら -0𝔽 を返す。
  12. 𝔽(sum) を返す。
Note

sum の値は任意精度演算なしに多様なアルゴリズムで計算可能である。例として Jonathan Richard Shewchuk による “Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates” の "Grow-Expansion" アルゴリズムがある。より新しい手法は "Fast exact summation using small and large superaccumulators" に示され、コードは https://gitlab.com/radfordneal/xsum で利用可能。

21.3.2.35 Math.tan ( x )

この関数は x の正接を返す。引数はラジアン。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN, +0𝔽, -0𝔽 のいずれかなら n を返す。
  3. n+∞𝔽 または -∞𝔽 なら NaN を返す。
  4. (n) の正接を表す実装近似 Number 値を返す。

21.3.2.36 Math.tanh ( x )

この関数は x の双曲線正接を返す。

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. nNaN, +0𝔽, -0𝔽 のいずれかなら n を返す。
  3. n+∞𝔽 なら 1𝔽 を返す。
  4. n-∞𝔽 なら -1𝔽 を返す。
  5. (n) の双曲線正接を表す実装近似 Number 値を返す。
Note

Math.tanh(x) の値は (Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x)) と同じである。

21.3.2.37 Math.trunc ( x )

この関数は数 x の小数部分を取り除いた整数部分を返す。x が既に整数なら結果は x

呼び出されたとき次を実行する:

  1. n を ? ToNumber(x) とする。
  2. n有限でないか _n_+0𝔽 または -0𝔽 なら n を返す。
  3. n < 1𝔽 かつ n > +0𝔽 なら +0𝔽 を返す。
  4. n < -0𝔽 かつ n > -1𝔽 なら -0𝔽 を返す。
  5. +0𝔽 方向で n に最も近い整数 Number を返す。

21.4 Date オブジェクト

21.4.1 Date オブジェクトの概要と抽象操作の定義

以下の抽象操作は(21.4.1.1 で定義される)時間値に対して動作する。いずれの場合も、これらの関数への引数のいずれかが NaN であれば、結果は NaN になることに注意。

21.4.1.1 時間値と時間範囲

ECMAScript における時間計測は POSIX における時間計測に類似し、とくに先発グレゴリオ暦(proleptic Gregorian calendar)、1970 年 1 月 1 日 UTC の開始時刻(真夜中)を エポック として定義し、1 日を正確に 86,400 秒(各秒は 1000 ミリ秒)とする会計的扱いを共有する。

ECMAScript の 時間値 は Number であり、ミリ秒精度での時点を表す有限整数の Number か、特定の時点を表さない NaN のいずれかである。24 × 60 × 60 × 1000 = 86,400,000 の倍数(すなわちある整数 d について 86,400,000 × d)である時間値は、エポックから d 個の完全な UTC 日を経過した UTC 日の開始時点(d が負であればエポックより前)を表す。それ以外の有限時間値 t は、その値以下で最大のかつ前述の倍数である時間値 s を基準とし、同一の UTC 日内で s の後に (t - s) ミリ秒経過した時点を表す。

時間値は UTC のうるう秒を考慮しない—正のうるう秒内の瞬間を表す時間値は存在せず、負のうるう秒によって UTC タイムラインから除去された瞬間を表す時間値は存在する。それでもなお、時間値の定義は区分的に UTC と整合し、うるう秒境界のみ不連続で、それ以外では差はゼロである。

Number は -9,007,199,254,740,992 から 9,007,199,254,740,992 までのすべての整数を正確に表現できる(21.1.2.8 および 21.1.2.6)。時間値は -8,640,000,000,000,000 から 8,640,000,000,000,000 ミリ秒というやや小さい範囲をサポートする。これは 1970 年 1 月 1 日 UTC の真夜中を基準に正確に -100,000,000 日から 100,000,000 日の範囲を与える。

1970 年 1 月 1 日 UTC の開始時刻の正確な瞬間は時間値 +0𝔽 で表される。

Note

先発グレゴリオ暦においてうるう年は、4 で割り切れ、かつ 400 で割り切れるか 100 で割り切れない年である。

先発グレゴリオ暦の 400 年周期には 97 のうるう年が含まれる。これは平均 365.2425 日/年(31,556,952,000 ミリ秒)となる。したがって Number がミリ秒精度で正確に表現できる最大範囲は 1970 年を基準に概ね -285,426 年から 285,426 年である。本節で規定される時間値がサポートするより小さい範囲はおよそ -273,790 年から 273,790 年である。

21.4.1.2 時間関連の定数

これらの定数は以下の節のアルゴリズムで参照される。

HoursPerDay = 24
MinutesPerHour = 60
SecondsPerMinute = 60
msPerSecond = 1000𝔽
msPerMinute = 60000𝔽 = msPerSecond × 𝔽(SecondsPerMinute)
msPerHour = 3600000𝔽 = msPerMinute × 𝔽(MinutesPerHour)
msPerDay = 86400000𝔽 = msPerHour × 𝔽(HoursPerDay)

21.4.1.3 Day ( t )

The abstract operation Day takes argument t (有限時間値) and returns 整数の Number. t が属する日の通し日数(day number)を返す。 It performs the following steps when called:

  1. 𝔽(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:

  1. 𝔽((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:

  1. ry(y) とする。
  2. (ry modulo 400) = 0 なら 366𝔽 を返す。
  3. (ry modulo 100) = 0 なら 365𝔽 を返す。
  4. (ry modulo 4) = 0 なら 366𝔽 を返す。
  5. 365𝔽 を返す。

21.4.1.6 DayFromYear ( y )

The abstract operation DayFromYear takes argument y (整数の Number) and returns 整数の Number. 年 y の初日(1 月 1 日)の day number を返す。 It performs the following steps when called:

  1. ry(y) とする。
  2. 注: 以降の手順で numYears1, numYears4, numYears100, numYears400エポックから年 y の開始までに含まれる、それぞれ 1, 4, 100, 400 で割り切れる年数を表す。yエポックより前なら負の数。
  3. numYears1 を (ry - 1970) とする。
  4. numYears4floor((ry - 1969) / 4) とする。
  5. numYears100floor((ry - 1901) / 100) とする。
  6. numYears400floor((ry - 1601) / 400) とする。
  7. 𝔽(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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. inLeapYearInLeapYear(t) とする。
  2. dayWithinYearDayWithinYear(t) とする。
  3. dayWithinYear < 31𝔽 なら +0𝔽 を返す。
  4. dayWithinYear < 59𝔽 + inLeapYear なら 1𝔽 を返す。
  5. dayWithinYear < 90𝔽 + inLeapYear なら 2𝔽 を返す。
  6. dayWithinYear < 120𝔽 + inLeapYear なら 3𝔽 を返す。
  7. dayWithinYear < 151𝔽 + inLeapYear なら 4𝔽 を返す。
  8. dayWithinYear < 181𝔽 + inLeapYear なら 5𝔽 を返す。
  9. dayWithinYear < 212𝔽 + inLeapYear なら 6𝔽 を返す。
  10. dayWithinYear < 243𝔽 + inLeapYear なら 7𝔽 を返す。
  11. dayWithinYear < 273𝔽 + inLeapYear なら 8𝔽 を返す。
  12. dayWithinYear < 304𝔽 + inLeapYear なら 9𝔽 を返す。
  13. dayWithinYear < 334𝔽 + inLeapYear なら 10𝔽 を返す。
  14. 事前条件: dayWithinYear < 365𝔽 + inLeapYear
  15. 11𝔽 を返す。

21.4.1.12 DateFromTime ( t )

The abstract operation DateFromTime takes argument t (有限時間値) and returns 1𝔽 から 31𝔽 まで(両端含む)の整数の Number. t が属する月の日(day of month)を返す。 It performs the following steps when called:

  1. inLeapYearInLeapYear(t) とする。
  2. dayWithinYearDayWithinYear(t) とする。
  3. monthMonthFromTime(t) とする。
  4. month+0𝔽 なら dayWithinYear + 1𝔽 を返す。
  5. month1𝔽 なら dayWithinYear - 30𝔽 を返す。
  6. month2𝔽 なら dayWithinYear - 58𝔽 - inLeapYear を返す。
  7. month3𝔽 なら dayWithinYear - 89𝔽 - inLeapYear を返す。
  8. month4𝔽 なら dayWithinYear - 119𝔽 - inLeapYear を返す。
  9. month5𝔽 なら dayWithinYear - 150𝔽 - inLeapYear を返す。
  10. month6𝔽 なら dayWithinYear - 180𝔽 - inLeapYear を返す。
  11. month7𝔽 なら dayWithinYear - 211𝔽 - inLeapYear を返す。
  12. month8𝔽 なら dayWithinYear - 242𝔽 - inLeapYear を返す。
  13. month9𝔽 なら dayWithinYear - 272𝔽 - inLeapYear を返す。
  14. month10𝔽 なら dayWithinYear - 303𝔽 - inLeapYear を返す。
  15. 事前条件: month11𝔽
  16. 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:

  1. 𝔽((Day(t) + 4𝔽) modulo 7) を返す。

21.4.1.14 HourFromTime ( t )

The abstract operation HourFromTime takes argument t (有限時間値) and returns +0𝔽 から 23𝔽 まで(両端含む)の整数の Number. t が属する日の時(hour)を返す。 It performs the following steps when called:

  1. 𝔽(floor((t / msPerHour)) modulo HoursPerDay) を返す。

21.4.1.15 MinFromTime ( t )

The abstract operation MinFromTime takes argument t (有限時間値) and returns +0𝔽 から 59𝔽 まで(両端含む)の整数の Number. t が属する時間の分(minute)を返す。 It performs the following steps when called:

  1. 𝔽(floor((t / msPerMinute)) modulo MinutesPerHour) を返す。

21.4.1.16 SecFromTime ( t )

The abstract operation SecFromTime takes argument t (有限時間値) and returns +0𝔽 から 59𝔽 まで(両端含む)の整数の Number. t が属する分の秒(second)を返す。 It performs the following steps when called:

  1. 𝔽(floor((t / msPerSecond)) modulo SecondsPerMinute) を返す。

21.4.1.17 msFromTime ( t )

The abstract operation msFromTime takes argument t (有限時間値) and returns +0𝔽 から 999𝔽 まで(両端含む)の整数の Number. t が属する秒のミリ秒(millisecond)を返す。 It performs the following steps when called:

  1. 𝔽((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:

  1. dateMakeDay(𝔽(year), 𝔽(month - 1), 𝔽(day)) とする。
  2. timeMakeTime(𝔽(hour), 𝔽(minute), 𝔽(second), 𝔽(millisecond)) とする。
  3. msMakeDate(date, time) とする。
  4. 事前条件: ms整数の Number。
  5. ((ms) × 106 + microsecond × 103 + nanosecond) を返す。

21.4.1.19 タイムゾーン識別子

ECMAScript におけるタイムゾーンは タイムゾーン識別子 により表され、これは 0x0000 から 0x007F(両端含む)のコードユニットのみから構成される文字列である。 ECMAScript 実装がサポートするタイムゾーンは、AvailableNamedTimeZoneIdentifiers が返す Time Zone Identifier Record[[Identifier]] フィールドで表される 利用可能な名前付きタイムゾーン、または IsTimeZoneOffsetStringtrue を返す文字列で表される オフセットタイムゾーン のいずれかであり得る。

一次タイムゾーン識別子 は、ある利用可能な名前付きタイムゾーンの推奨識別子である。 非一次タイムゾーン識別子 は、一次タイムゾーン識別子ではない利用可能な名前付きタイムゾーンの識別子である。 利用可能な名前付きタイムゾーン識別子 は一次または非一次のいずれかである。 各利用可能な名前付きタイムゾーン識別子は厳密に 1 つの名前付きタイムゾーンに対応し、 各利用可能な名前付きタイムゾーンは厳密に 1 つの一次タイムゾーン識別子と 0 個以上の非一次タイムゾーン識別子に対応する。

ECMAScript 実装は識別子 "UTC" を持つ利用可能な名前付きタイムゾーンをサポートしなければならず、これは UTC タイムゾーンの一次タイムゾーン識別子でなければならない。 さらに実装は他の任意個数の利用可能な名前付きタイムゾーンをサポートしてもよい。

ECMA-402 Internationalization API 仕様で記述されるタイムゾーン要件に従う実装は タイムゾーン対応 (time zone aware) と呼ばれる。 タイムゾーン対応実装は IANA Time Zone Database の Zone 名および Link 名に対応する利用可能な名前付きタイムゾーンをサポートし、かつそれらのみをサポートしなければならない。 タイムゾーン対応実装では、一次タイムゾーン識別子は Zone 名であり、非一次タイムゾーン識別子は Link 名である(ただし ECMA-402 仕様で規定される AvailableNamedTimeZoneIdentifiers により特に上書きされる場合を除く)。 IANA Time Zone Database 全体をサポートしない実装であっても、タイムゾーンを表す識別子として IANA Time Zone Database の名前を用いることが推奨される。

21.4.1.20 GetNamedTimeZoneEpochNanoseconds ( timeZoneIdentifier, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond )

The implementation-defined abstract operation GetNamedTimeZoneEpochNanoseconds takes arguments timeZoneIdentifier (String), year (整数), month (1 から 12(両端含む)の整数), day (1 から 31(両端含む)の整数), hour (0 から 23(両端含む)の整数), minute (0 から 59(両端含む)の整数), second (0 から 59(両端含む)の整数), millisecond (0 から 999(両端含む)の整数), microsecond (0 から 999(両端含む)の整数), and nanosecond (0 から 999(両端含む)の整数) and returns BigInt の List. 返される List の各要素は、timeZoneIdentifier で識別される名前付きタイムゾーン内で、与えられた ISO 8601 暦日と壁時計時刻に対応する、エポックからのナノ秒数を表す。

入力が負のタイムゾーン遷移(例: 夏時間終了やルール変更によるオフセット減少)により複数回出現するローカル時刻を表す場合、返される List は複数要素を持ち、数値昇順で並ぶ。 入力が正のタイムゾーン遷移(例: 夏時間開始やルール変更によるオフセット増加)でスキップされるローカル時刻を表す場合、返される List は空となる。 それ以外の場合、返される List は 1 要素を持つ。

ローカルの政治的ルールをいかなるタイムゾーンについても含まない ECMAScript 実装で利用される GetNamedTimeZoneEpochNanoseconds のデフォルト実装は、呼び出されたとき次を行う:

  1. 事前条件: timeZoneIdentifier"UTC"
  2. epochNanosecondsGetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) とする。
  3. « epochNanoseconds » を返す。
Note

タイムゾーン対応実装(および他のすべての実装にも推奨)は IANA Time Zone Database https://www.iana.org/time-zones/ のタイムゾーン情報を使用することが要求される。

2017 年 11 月 5 日の America/New_York における午前 1:30 は 2 回繰り返されるため、GetNamedTimeZoneEpochNanoseconds("America/New_York", 2017, 11, 5, 1, 30, 0, 0, 0, 0) は長さ 2 の List を返し、最初の要素は 05:30 UTC(UTC-04:00 の米国東部夏時間の 01:30)を、第二の要素は 06:30 UTC(UTC-05:00 の米国東部標準時の 01:30)を表す。

2017 年 3 月 12 日の America/New_York における午前 2:30 は存在しないので、GetNamedTimeZoneEpochNanoseconds("America/New_York", 2017, 3, 12, 2, 30, 0, 0, 0, 0) は空の List を返す。

21.4.1.21 GetNamedTimeZoneOffsetNanoseconds ( timeZoneIdentifier, epochNanoseconds )

The implementation-defined abstract operation GetNamedTimeZoneOffsetNanoseconds takes arguments timeZoneIdentifier (String) and epochNanoseconds (BigInt) and returns 整数.

返される整数は、timeZoneIdentifier で識別される名前付きタイムゾーンの、エポックからの epochNanoseconds が表す瞬間における UTC からのオフセット(いずれもナノ秒)を表す。

ローカルの政治的ルールをいかなるタイムゾーンについても含まない ECMAScript 実装で利用される GetNamedTimeZoneOffsetNanoseconds のデフォルト実装は、呼び出されたとき次を行う:

  1. 事前条件: timeZoneIdentifier"UTC"
  2. 0 を返す。
Note

タイムゾーンオフセット値は正または負になり得る。

21.4.1.22 タイムゾーン識別子レコード

タイムゾーン識別子レコード利用可能な名前付きタイムゾーン識別子とその対応する一次タイムゾーン識別子を記述するための Record である。

タイムゾーン識別子レコードは Table 62 に掲げるフィールドを持つ。

Table 62: タイムゾーン識別子レコードのフィールド
フィールド名 意味
[[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 RecordList. 戻り値はこの実装内のすべての利用可能な名前付きタイムゾーン識別子と、それぞれに対応する一次タイムゾーン識別子を記述する。 List は各 Time Zone Identifier Record[[Identifier]] フィールド順に並ぶ。

タイムゾーン対応実装(ECMA-402 Internationalization API を実装するすべての実装を含む)は AvailableNamedTimeZoneIdentifiers 抽象操作を ECMA-402 仕様に従って実装しなければならない。 タイムゾーン対応でない実装では、AvailableNamedTimeZoneIdentifiers は呼び出されたとき以下を行う:

  1. 実装がいかなるタイムゾーンについてもローカルの政治的ルールを含まないなら
    1. « Time Zone Identifier Record { [[Identifier]]: "UTC", [[PrimaryIdentifier]]: "UTC" } » を返す。
  2. identifiers を、重複しない利用可能な名前付きタイムゾーン識別子List辞書式コードユニット順にソート)とする。
  3. result を新しい空の List とする。
  4. identifiers の各要素 identifier について、
    1. primaryidentifier とする。
    2. identifier がこの実装における非一次タイムゾーン識別子でありかつ identifier"UTC" でないなら
      1. primaryidentifier に関連付けられた一次タイムゾーン識別子に設定する。
      2. 注: 実装は一次タイムゾーン識別子を得るために identifier を反復的に解決する必要があるかもしれない。
    3. record を Time Zone Identifier Record { [[Identifier]]: identifier, [[PrimaryIdentifier]]: primary } とする。
    4. recordresult に追加する。
  5. 事前条件: result[[Identifier]]"UTC"[[PrimaryIdentifier]]"UTC" である Time Zone Identifier Record r を含む。
  6. result を返す。

21.4.1.24 SystemTimeZoneIdentifier ( )

The implementation-defined abstract operation SystemTimeZoneIdentifier takes no arguments and returns String. ホスト環境の現在のタイムゾーンを表す文字列を返す。それは IsTimeZoneOffsetStringtrue を返す UTC オフセットを表す文字列、または一次タイムゾーン識別子のいずれかである。 It performs the following steps when called:

  1. 実装が UTC タイムゾーンのみをサポートするなら "UTC" を返す。
  2. systemTimeZoneStringホスト環境の現在のタイムゾーンを表す文字列(一次タイムゾーン識別子またはオフセットタイムゾーン識別子)とする。
  3. systemTimeZoneString を返す。
Note

Date オブジェクトのメソッドで一般的に提供される機能レベルを確実にするため、SystemTimeZoneIdentifier はホスト環境のタイムゾーン設定に対応する IANA タイムゾーン名(存在するなら)を返すことが推奨される。 GetNamedTimeZoneEpochNanosecondsGetNamedTimeZoneOffsetNanoseconds はそのタイムゾーンの標準時および夏時間のローカル政治的ルールを反映しなければならない(存在する場合)。

例えば、ホスト環境がユーザが US Eastern Time を選択したシステム上のブラウザである場合、SystemTimeZoneIdentifier は "America/New_York" を返す。

21.4.1.25 LocalTime ( t )

The abstract operation LocalTime takes argument t (有限時間値) and returns 整数の Number. t を UTC からローカル時刻に変換する。 t に有効な標準時と夏時間のローカル政治的ルールを、この節で規定される方法で用いて結果を決定するべきである。 It performs the following steps when called:

  1. systemTimeZoneIdentifierSystemTimeZoneIdentifier() とする。
  2. IsTimeZoneOffsetString(systemTimeZoneIdentifier) が true なら
    1. offsetNsParseTimeZoneOffsetString(systemTimeZoneIdentifier) とする。
  3. そうでなければ、
    1. offsetNsGetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, ((t) × 106)) とする。
  4. offsetMstruncate(offsetNs / 106) とする。
  5. 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 つの異なる入力時間値 tUTC が同じローカル時刻 tlocal に変換される。

LocalTime(UTC(tlocal)) は常に tlocal と等しいとは限らない。同様に UTC(LocalTime(tUTC)) も常に tUTC と等しいとは限らない。

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:

  1. t有限でなければ NaN を返す。
  2. systemTimeZoneIdentifierSystemTimeZoneIdentifier() とする。
  3. IsTimeZoneOffsetString(systemTimeZoneIdentifier) が true なら
    1. offsetNsParseTimeZoneOffsetString(systemTimeZoneIdentifier) とする。
  4. そうでなければ、
    1. possibleInstantsGetNamedTimeZoneEpochNanoseconds(systemTimeZoneIdentifier, (YearFromTime(t)), (MonthFromTime(t)) + 1, (DateFromTime(t)), (HourFromTime(t)), (MinFromTime(t)), (SecFromTime(t)), (msFromTime(t)), 0, 0) とする。
    2. 注: 以下の手順は t が負のタイムゾーン遷移(例: 夏時間終了やオフセット減少)で複数回繰り返されるローカル時刻、または正のタイムゾーン遷移(例: 夏時間開始やオフセット増加)でスキップされるローカル時刻を表すとき、t が遷移前のタイムゾーンオフセットを用いて解釈されることを保証する。
    3. possibleInstants が空でなければ
      1. disambiguatedInstantpossibleInstants[0] とする。
    4. そうでなければ、
      1. 注: t は正のタイムゾーン遷移(例: 夏時間開始やオフセット増加)でスキップされたローカル時刻を表す。
      2. possibleInstantsBeforeGetNamedTimeZoneEpochNanoseconds(systemTimeZoneIdentifier, (YearFromTime(tBefore)), (MonthFromTime(tBefore)) + 1, (DateFromTime(tBefore)), (HourFromTime(tBefore)), (MinFromTime(tBefore)), (SecFromTime(tBefore)), (msFromTime(tBefore)), 0, 0) とし、ここで tBeforepossibleInstantsBefore が空でない最大の整数 Number かつ t より小さいもの(すなわち遷移直前の最後のローカル時刻)である。
      3. disambiguatedInstantpossibleInstantsBefore の最後の要素とする。
    5. offsetNsGetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, disambiguatedInstant) とする。
  5. offsetMstruncate(offsetNs / 106) とする。
  6. t - 𝔽(offsetMs) を返す。

入力 t は名目上時間値だが、任意の Number 値でよい。 アルゴリズムは t時間値範囲に制限してはならず、これにより時間値範囲の境界に対応する入力がローカル UTC オフセットに関わらずサポート可能となる。 例えば最大時間値は 8.64 × 1015"+275760-09-13T00:00:00Z" に対応する。 その瞬間にローカルタイムゾーンオフセットが UTC より 1 時間進んでいる環境では、より大きい入力 8.64 × 1015 + 3.6 × 106 で表され、"+275760-09-13T01:00:00+01:00" に対応する。

実装内にローカル時刻 t の政治的ルールが利用可能でない場合、SystemTimeZoneIdentifier"UTC" を返し GetNamedTimeZoneOffsetNanoseconds が 0 を返すため、結果は t と同じになる。

Note 1

タイムゾーン対応実装(および他のすべての実装にも推奨)は IANA Time Zone Database https://www.iana.org/time-zones/ のタイムゾーン情報を使用することが要求される。

2017 年 11 月 5 日の America/New_York の午前 1:30 は 2 回繰り返される(秋の戻し)が、UTC(TimeClip(MakeDate(MakeDay(2017, 10, 5), MakeTime(1, 30, 0, 0)))) では offsetMs の値は -4 × msPerHour となり、1:30 AM UTC-04 として解釈されなければならない。

2017 年 3 月 12 日の America/New_York の午前 2:30 は存在しないが、2:30 AM UTC-05(3:30 AM UTC-04 と同等)として解釈されなければならない。 UTC(TimeClip(MakeDate(MakeDay(2017, 2, 12), MakeTime(2, 30, 0, 0)))) において offsetMs の値は -5 × msPerHour である。

Note 2

UTC(LocalTime(tUTC)) は常に tUTC と等しいとは限らない。同様に LocalTime(UTC(tlocal)) も常に tlocal と等しいとは限らない。

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:

  1. hour有限でない、min有限でない、sec有限でない、または ms有限でないなら NaN を返す。
  2. h𝔽(! ToIntegerOrInfinity(hour)) とする。
  3. m𝔽(! ToIntegerOrInfinity(min)) とする。
  4. s𝔽(! ToIntegerOrInfinity(sec)) とする。
  5. milli𝔽(! ToIntegerOrInfinity(ms)) とする。
  6. ((h × msPerHour + m × msPerMinute) + s × msPerSecond) + milli を返す。
Note

MakeTime の算術は浮動小数点算術であり結合的でないため、演算は正しい順序で行われなければならない。

21.4.1.28 MakeDay ( year, month, date )

The abstract operation MakeDay takes arguments year (Number), month (Number), and date (Number) and returns Number. 日数を計算する。 It performs the following steps when called:

  1. year有限でない、month有限でない、または date有限でないなら NaN を返す。
  2. y𝔽(! ToIntegerOrInfinity(year)) とする。
  3. m𝔽(! ToIntegerOrInfinity(month)) とする。
  4. dt𝔽(! ToIntegerOrInfinity(date)) とする。
  5. ymy + 𝔽(floor((m) / 12)) とする。
  6. ym有限でなければ NaN を返す。
  7. mn𝔽((m) modulo 12) とする。
  8. YearFromTime(t) が ymMonthFromTime(t) が mnDateFromTime(t) が 1𝔽 である有限時間値 t を見つける。ただし(引数が範囲外であるなどにより)不可能なら NaN を返す。
  9. Day(t) + dt - 1𝔽 を返す。

21.4.1.29 MakeDate ( day, time )

The abstract operation MakeDate takes arguments day (Number) and time (Number) and returns Number. ミリ秒数を計算する。 It performs the following steps when called:

  1. day有限でないまたは time有限でないなら NaN を返す。
  2. tvday × msPerDay + time とする。
  3. tv有限でないなら NaN を返す。
  4. tv を返す。

21.4.1.30 MakeFullYear ( year )

The abstract operation MakeFullYear takes argument year (Number) and returns 整数の Number または NaN. year整数部分に関連付けられた完全な年(full year)を返す。0 から 99(両端含む)の値は 1900 年の開始からの年数として解釈する。先発グレゴリオ暦との整合のため、「full year」は年 0(紀元前 1 年)の開始からの完了した年の符号付き個数と定義される。 It performs the following steps when called:

  1. yearNaN なら NaN を返す。
  2. truncated を ! ToIntegerOrInfinity(year) とする。
  3. truncated が 0 から 99(両端含む)なら 1900𝔽 + 𝔽(truncated) を返す。
  4. 𝔽(truncated) を返す。

21.4.1.31 TimeClip ( time )

The abstract operation TimeClip takes argument time (Number) and returns Number. ミリ秒数を計算する。 It performs the following steps when called:

  1. time有限でなければ NaN を返す。
  2. abs((time)) > 8.64 × 1015 なら NaN を返す。
  3. 𝔽(! ToIntegerOrInfinity(time)) を返す。

21.4.1.32 日時文字列フォーマット

ECMAScript は ISO 8601 暦日の拡張形式を単純化した日時の文字列交換フォーマットを定義する。形式は次のとおり: YYYY-MM-DDTHH:mm:ss.sssZ

要素の意味は以下のとおり:

YYYY 0000 から 9999 までの 4 桁の 10 進数、または "+" または "-" に続く 6 桁の 10 進数による 拡張年 としての先発グレゴリオ暦の年。
- "-"(ハイフン)が文字列中に 2 回字義通りに現れる。
MM 01(1 月)から 12(12 月)までの 2 桁の 10 進数としての月。
DD 01 から 31 までの 2 桁の 10 進数としての月の日。
T 時刻要素の開始を示すために "T" が文字列中に字義通りに現れる。
HH 深夜から経過した完全な時数を 00 から 24 までの 2 桁の 10 進数で表したもの。
: ":"(コロン)が文字列中に 2 回字義通りに現れる。
mm 時の開始から経過した完全な分数を 00 から 59 までの 2 桁の 10 進数で表したもの。
ss 分の開始から経過した完全な秒数を 00 から 59 までの 2 桁の 10 進数で表したもの。
. "."(ドット)が文字列中に字義通りに現れる。
sss 秒の開始から経過した完全なミリ秒数を 3 桁の 10 進数で表したもの。
Z UTC オフセット表現。"Z"(UTC でオフセットなし)または "+" もしくは "-" に続く時刻表現 HH:mmタイムゾーンオフセット文字列形式 の部分集合で、UTC より進んでいる/遅れているローカル時刻を示す)

この形式には日付のみの形式も含まれる:

YYYY
YYYY-MM
YYYY-MM-DD
        

また、上記の日付のみの形式に続けて以下のいずれかの時刻形式(オプションの UTC オフセット表現付き)を直後に置いた “日時 (date-time)” 形式も含まれる:

THH:mm
THH:mm:ss
THH:mm:ss.sss
        

範囲外または不適合な要素を含む文字列はこの形式の有効なインスタンスではない。

Note 1

各日が深夜で始まり終わるため、2 つの深夜を区別するために 00:0024:00 の 2 つの表記が利用可能である。これは 1995-02-04T24:001995-02-05T00:00 の 2 つの表記が正確に同一の時点を指すことを意味する。この後者形式を「暦日終端」と解釈することは ISO 8601 と整合している(同仕様では時間間隔の記述に予約され、単一時点の表現には許容されないが)。

Note 2

CET や EST などの市民タイムゾーン略称を規定する国際標準は存在せず、同じ略称が別の非常に異なるタイムゾーンに使われることもある。このため ISO 8601 と本形式はいずれもタイムゾーンオフセットの数値表現を規定する。

21.4.1.32.1 拡張年 (Expanded Years)

1 January 1970(21.4.1.1)から約 273,790 年前後の時間値範囲全体をカバーするには 0 より前または 9999 より後の年を表現する必要がある。ISO 8601 は年表現の拡張を許容するが、情報交換の当事者間の合意が必要である。単純化された ECMAScript 形式では、そのような拡張年表現は 6 桁であり、常に + または - の符号を前置する。年 0 は正とみなされ + 符号を前置しなければならない。年 0 を -000000 と表すことは無効である。拡張年が時間値の範囲外の時点を表す 日時文字列形式 にマッチする文字列は Date.parse によって認識不能として扱われ、実装依存の挙動やヒューリスティクスにフォールバックせず NaN を返す。

Note

拡張年を用いた日時(time values)の例:

-271821-04-20T00:00:00Z 271822 B.C.
-000001-01-01T00:00:00Z 2 B.C.
+000000-01-01T00:00:00Z 1 B.C.
+000001-01-01T00:00:00Z 1 A.D.
+001970-01-01T00:00:00Z 1970 A.D.
+002009-12-15T00:00:00Z 2009 A.D.
+275760-09-13T00:00:00Z 275760 A.D.

21.4.1.33 タイムゾーンオフセット文字列形式

ECMAScript は ISO 8601 に由来する UTC オフセットの文字列交換形式を定義する。 形式は以下の文法で記述される。

構文

UTCOffset ::: ASCIISign Hour ASCIISign Hour HourSubcomponents[+Extended] ASCIISign Hour HourSubcomponents[~Extended] ASCIISign ::: one of + - Hour ::: 0 DecimalDigit 1 DecimalDigit 20 21 22 23 HourSubcomponents[Extended] ::: TimeSeparator[?Extended] MinuteSecond TimeSeparator[?Extended] MinuteSecond TimeSeparator[?Extended] MinuteSecond TemporalDecimalFractionopt 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. 戻り値は offsetStringUTCOffset の文法に適合するかどうかを示す。 It performs the following steps when called:

  1. parseResult を ParseText(offsetString, UTCOffset) とする。
  2. parseResult がエラーの List なら false を返す。
  3. true を返す。

21.4.1.33.2 ParseTimeZoneOffsetString ( offsetString )

The abstract operation ParseTimeZoneOffsetString takes argument offsetString (String) and returns 整数. 戻り値は offsetString に対応する UTC オフセット(ナノ秒数)である。 It performs the following steps when called:

  1. parseResult を ParseText(offsetString, UTCOffset) とする。
  2. 事前条件: parseResult はエラーの List ではない。
  3. 事前条件: parseResultASCIISign構文ノードを含む。
  4. parsedSignparseResult に含まれる ASCIISign 構文ノードがマッチしたソーステキストとする。
  5. parsedSign が単一コードポイント U+002D (HYPHEN-MINUS) なら
    1. sign を -1 とする。
  6. そうでなければ
    1. sign を 1 とする。
  7. 注: 以下の StringToNumber の適用は、各解析値が十分に短い 10 進数字列であることが保証されるため精度を失わない。
  8. 事前条件: parseResultHour 構文ノードを含む。
  9. parsedHoursparseResult に含まれる Hour 構文ノードがマッチしたソーステキストとする。
  10. hours(StringToNumber(CodePointsToString(parsedHours))) とする。
  11. parseResultMinuteSecond 構文ノードを含まないなら
    1. minutes を 0 とする。
  12. そうでなければ
    1. parsedMinutesparseResult に含まれる最初の MinuteSecond 構文ノードがマッチしたソーステキストとする。
    2. minutes(StringToNumber(CodePointsToString(parsedMinutes))) とする。
  13. parseResult が 2 つの MinuteSecond 構文ノードを含まないなら
    1. seconds を 0 とする。
  14. そうでなければ
    1. parsedSecondsparseResult に含まれる 2 番目の MinuteSecond 構文ノードがマッチしたソーステキストとする。
    2. seconds(StringToNumber(CodePointsToString(parsedSeconds))) とする。
  15. parseResultTemporalDecimalFraction 構文ノードを含まないなら
    1. nanoseconds を 0 とする。
  16. そうでなければ
    1. parsedFractionparseResult に含まれる TemporalDecimalFraction 構文ノードがマッチしたソーステキストとする。
    2. fraction を CodePointsToString(parsedFraction) と "000000000"文字列連結とする。
    3. nanosecondsStringfraction の先頭から 10 文字の部分文字列とする。
    4. nanoseconds(StringToNumber(nanosecondsString)) とする。
  17. sign × (((hours × 60 + minutes) × 60 + seconds) × 109 + nanoseconds) を返す。

21.4.2 Date コンストラクター

Date コンストラクター:

  • %Date% である。
  • グローバルオブジェクト"Date" プロパティの初期値である。
  • コンストラクターとして呼び出されたとき、新しい Date を作成し初期化する。
  • コンストラクターではなく関数として呼び出された場合、現在の時刻(UTC)を表す文字列を返す。
  • 引数の数や型によって動作が異なる関数である。
  • クラス定義の extends 節の値として利用できる。指定された Date の動作を継承したいサブクラスのコンストラクターは、サブクラスインスタンスを [[DateValue]] 内部スロット付きで生成・初期化するために Date コンストラクターへの super 呼び出しを含める必要がある。

21.4.2.1 Date ( ...values )

この関数は呼び出されたとき、以下の手順を実行する:

  1. NewTarget が undefined なら
    1. now を現在時刻(UTC)を示す時刻値とする。
    2. ToDateString(now) を返す。
  2. numberOfArgsvalues の要素数とする。
  3. numberOfArgs = 0 の場合
    1. dv を現在時刻(UTC)を示す時刻値とする。
  4. numberOfArgs = 1 の場合
    1. valuevalues[0] とする。
    2. value がオブジェクトで [[DateValue]] 内部スロットを持つなら
      1. tvvalue.[[DateValue]] とする。
    3. それ以外の場合
      1. v を ? ToPrimitive(value) とする。
      2. v が文字列ならば
        1. アサート: 次のステップで突然の完了になることはない(v は文字列)。
        2. tvparse メソッド (21.4.3.2) と全く同じ方法で v を日付としてパースした結果とする。
      3. それ以外の場合
        1. tv を ? ToNumber(v) とする。
    4. dvTimeClip(tv) とする。
  5. それ以外の場合
    1. アサート: numberOfArgs ≥ 2。
    2. y を ? ToNumber(values[0]) とする。
    3. m を ? ToNumber(values[1]) とする。
    4. numberOfArgs > 2 なら dt を ? ToNumber(values[2]); そうでなければ dt1𝔽 とする。
    5. numberOfArgs > 3 なら h を ? ToNumber(values[3]); そうでなければ h+0𝔽 とする。
    6. numberOfArgs > 4 なら min を ? ToNumber(values[4]); そうでなければ min+0𝔽 とする。
    7. numberOfArgs > 5 なら s を ? ToNumber(values[5]); そうでなければ s+0𝔽 とする。
    8. numberOfArgs > 6 なら milli を ? ToNumber(values[6]); そうでなければ milli+0𝔽 とする。
    9. yrMakeFullYear(y) とする。
    10. finalDateMakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli)) とする。
    11. dvTimeClip(UTC(finalDate)) とする。
  6. O を ? OrdinaryCreateFromConstructor(NewTarget, "%Date.prototype%", « [[DateValue]] ») とする。
  7. O.[[DateValue]]dv を設定する。
  8. O を返す。

21.4.3 Date コンストラクターのプロパティ

Date コンストラクター:

  • [[Prototype]] 内部スロットの値は %Function.prototype% である。
  • "length" プロパティの値は 7𝔽 である。
  • 以下のプロパティを持つ:

21.4.3.1 Date.now ( )

この関数は、呼び出し時点の UTC 日付と時刻を示す時刻値を返す。

21.4.3.2 Date.parse ( string )

この関数は引数に ToString 演算子を適用する。ToString の結果が突然の完了となった場合、その完了レコードを直ちに返す。それ以外の場合、この関数は得られた文字列を日付と時刻として解釈し、その日付と時刻に対応する UTC 時刻値(数値)を返す。文字列は内容に応じてローカル時刻、UTC、その他のタイムゾーンとして解釈されることがある。関数はまず Date Time String Format (21.4.1.32) および拡張年の形式に従ってパースを試みる。文字列がその形式に合致しない場合、実装依存のヒューリスティックや日付形式にフォールバックすることがある。判別できない、または範囲外の値を含む文字列は NaN を返す。

文字列が Date Time String Format に適合する場合、代替値が欠落した書式要素の代わりに用いられる。MMDD 要素が欠落している場合は "01"HH, mm, ss 要素が欠落している場合は "00"sss 要素がない場合は "000"、UTC オフセット表現がない場合は日付のみの形式は UTC として、日付時刻形式はローカル時刻として解釈される。

ECMAScript の特定の実装において、任意の Date のミリ秒部分がゼロの場合、以下すべての式はその実装で同じ数値を生成するはずである(すべての参照プロパティが初期値ならば):

x.valueOf()
Date.parse(x.toString())
Date.parse(x.toUTCString())
Date.parse(x.toISOString())

ただし、次の式

Date.parse(x.toLocaleString())

は前の3つの式と同じ数値を生成することは要求されず、一般にこの関数が Date Time String Format (21.4.1.32) に適合せず、その実装で toStringtoUTCString メソッドによって生成できない任意の文字列を与えたときの値は実装依存である。

21.4.3.3 Date.prototype

Date.prototype の初期値は Date プロトタイプオブジェクトである。

このプロパティの属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } である。

21.4.3.4 Date.UTC ( year [ , month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] ] )

この関数は呼び出されたとき、以下の手順を実行する:

  1. y を ? ToNumber(year) とする。
  2. month が与えられていれば m を ? ToNumber(month) とし、なければ m+0𝔽 とする。
  3. date が与えられていれば dt を ? ToNumber(date) とし、なければ dt1𝔽 とする。
  4. hours が与えられていれば h を ? ToNumber(hours) とし、なければ h+0𝔽 とする。
  5. minutes が与えられていれば min を ? ToNumber(minutes) とし、なければ min+0𝔽 とする。
  6. seconds が与えられていれば s を ? ToNumber(seconds) とし、なければ s+0𝔽 とする。
  7. ms が与えられていれば milli を ? ToNumber(ms) とし、なければ milli+0𝔽 とする。
  8. yrMakeFullYear(y) とする。
  9. TimeClip(MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli))) を返す。

この関数の "length" プロパティは 7𝔽 である。

Note

この関数は Date コンストラクターと2つの点で異なる。数値として時刻値を返し、引数をローカル時刻ではなく UTC として解釈する。

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 ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. DateFromTime(LocalTime(t)) を返す。

21.4.4.3 Date.prototype.getDay ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. WeekDay(LocalTime(t)) を返す。

21.4.4.4 Date.prototype.getFullYear ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. YearFromTime(LocalTime(t)) を返す。

21.4.4.5 Date.prototype.getHours ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. HourFromTime(LocalTime(t)) を返す。

21.4.4.6 Date.prototype.getMilliseconds ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. msFromTime(LocalTime(t)) を返す。

21.4.4.7 Date.prototype.getMinutes ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. MinFromTime(LocalTime(t)) を返す。

21.4.4.8 Date.prototype.getMonth ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. MonthFromTime(LocalTime(t)) を返す。

21.4.4.9 Date.prototype.getSeconds ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. SecFromTime(LocalTime(t)) を返す。

21.4.4.10 Date.prototype.getTime ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. dateObject.[[DateValue]] を返す。

21.4.4.11 Date.prototype.getTimezoneOffset ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. (t - LocalTime(t)) / msPerMinute を返す。

21.4.4.12 Date.prototype.getUTCDate ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. DateFromTime(t) を返す。

21.4.4.13 Date.prototype.getUTCDay ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. WeekDay(t) を返す。

21.4.4.14 Date.prototype.getUTCFullYear ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. YearFromTime(t) を返す。

21.4.4.15 Date.prototype.getUTCHours ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. HourFromTime(t) を返す。

21.4.4.16 Date.prototype.getUTCMilliseconds ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. msFromTime(t) を返す。

21.4.4.17 Date.prototype.getUTCMinutes ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. MinFromTime(t) を返す。

21.4.4.18 Date.prototype.getUTCMonth ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. MonthFromTime(t) を返す。

21.4.4.19 Date.prototype.getUTCSeconds ( )

このメソッドは呼び出されると、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら NaN を返す。
  5. SecFromTime(t) を返す。

21.4.4.20 Date.prototype.setDate ( date )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. dt を ? ToNumber(date) とする。
  5. tNaN なら、NaN を返す。
  6. tLocalTime(t) に設定する。
  7. newDateMakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)) とする。
  8. uTimeClip(UTC(newDate)) とする。
  9. dateObject.[[DateValue]]u を設定する。
  10. u を返す。

21.4.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. y を ? ToNumber(year) とする。
  5. tNaN なら t+0𝔽 に設定し、そうでなければ LocalTime(t) に設定する。
  6. month が存在しない場合、mMonthFromTime(t) とし、そうでなければ ? ToNumber(month) とする。
  7. date が存在しない場合、dtDateFromTime(t) とし、そうでなければ ? ToNumber(date) とする。
  8. newDateMakeDate(MakeDay(y, m, dt), TimeWithinDay(t)) とする。
  9. uTimeClip(UTC(newDate)) とする。
  10. dateObject.[[DateValue]]u を設定する。
  11. u を返す。

このメソッドの "length" プロパティは 3𝔽 である。

Note

month が存在しない場合、このメソッドは getMonth() の値が指定されたかのように振る舞う。date が存在しない場合は getDate() の値が指定されたかのように振る舞う。

21.4.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. h を ? ToNumber(hour) とする。
  5. min が存在するなら m を ? ToNumber(min) とする。
  6. sec が存在するなら s を ? ToNumber(sec) とする。
  7. ms が存在するなら milli を ? ToNumber(ms) とする。
  8. tNaN なら NaN を返す。
  9. tLocalTime(t) に設定する。
  10. min が存在しない場合、mMinFromTime(t) とする。
  11. sec が存在しない場合、sSecFromTime(t) とする。
  12. ms が存在しない場合、millimsFromTime(t) とする。
  13. dateMakeDate(Day(t), MakeTime(h, m, s, milli)) とする。
  14. uTimeClip(UTC(date)) とする。
  15. dateObject.[[DateValue]]u を設定する。
  16. u を返す。

このメソッドの "length" プロパティは 4𝔽 である。

Note

min が存在しない場合、このメソッドは getMinutes() の値が指定されたかのように振る舞う。sec が存在しない場合は getSeconds() の値が指定されたかのように振る舞う。ms が存在しない場合は getMilliseconds() の値が指定されたかのように振る舞う。

21.4.4.23 Date.prototype.setMilliseconds ( ms )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. ms を ? ToNumber(ms) に設定する。
  5. tNaN なら NaN を返す。
  6. tLocalTime(t) に設定する。
  7. timeMakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms) とする。
  8. uTimeClip(UTC(MakeDate(Day(t), time))) とする。
  9. dateObject.[[DateValue]]u を設定する。
  10. u を返す。

21.4.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. m を ? ToNumber(min) とする。
  5. sec が存在するなら s を ? ToNumber(sec) とする。
  6. ms が存在するなら milli を ? ToNumber(ms) とする。
  7. tNaN なら NaN を返す。
  8. tLocalTime(t) に設定する。
  9. sec が存在しない場合、sSecFromTime(t) とする。
  10. ms が存在しない場合、millimsFromTime(t) とする。
  11. dateMakeDate(Day(t), MakeTime(HourFromTime(t), m, s, milli)) とする。
  12. uTimeClip(UTC(date)) とする。
  13. dateObject.[[DateValue]]u を設定する。
  14. u を返す。

このメソッドの "length" プロパティは 3𝔽 である。

Note

sec が存在しない場合、このメソッドは getSeconds() の値が指定されたかのように振る舞う。ms が存在しない場合は getMilliseconds() の値が指定されたかのように振る舞う。

21.4.4.25 Date.prototype.setMonth ( month [ , date ] )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. m を ? ToNumber(month) とする。
  5. date が存在するなら dt を ? ToNumber(date) とする。
  6. tNaN なら NaN を返す。
  7. tLocalTime(t) に設定する。
  8. date が存在しない場合、dtDateFromTime(t) とする。
  9. newDateMakeDate(MakeDay(YearFromTime(t), m, dt), TimeWithinDay(t)) とする。
  10. uTimeClip(UTC(newDate)) とする。
  11. dateObject.[[DateValue]]u を設定する。
  12. u を返す。

このメソッドの "length" プロパティは 2𝔽 である。

Note

date が存在しない場合、このメソッドは getDate() の値が指定されたかのように振る舞う。

21.4.4.26 Date.prototype.setSeconds ( sec [ , ms ] )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. s を ? ToNumber(sec) とする。
  5. ms が存在するなら milli を ? ToNumber(ms) とする。
  6. tNaN なら NaN を返す。
  7. tLocalTime(t) に設定する。
  8. ms が存在しない場合、millimsFromTime(t) とする。
  9. dateMakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), s, milli)) とする。
  10. uTimeClip(UTC(date)) とする。
  11. dateObject.[[DateValue]]u を設定する。
  12. u を返す。

このメソッドの "length" プロパティは 2𝔽 である。

Note

ms が存在しない場合、このメソッドは getMilliseconds() の値が指定されたかのように振る舞う。

21.4.4.27 Date.prototype.setTime ( time )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. t を ? ToNumber(time) とする。
  4. vTimeClip(t) とする。
  5. dateObject.[[DateValue]]v を設定する。
  6. v を返す。

21.4.4.28 Date.prototype.setUTCDate ( date )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. dt を ? ToNumber(date) とする。
  5. tNaN なら NaN を返す。
  6. newDateMakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)) とする。
  7. vTimeClip(newDate) とする。
  8. dateObject.[[DateValue]]v を設定する。
  9. v を返す。

21.4.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN なら t+0𝔽 に設定する。
  5. y を ? ToNumber(year) とする。
  6. month が存在しない場合、mMonthFromTime(t) とし、そうでなければ ? ToNumber(month) とする。
  7. date が存在しない場合、dtDateFromTime(t) とし、そうでなければ ? ToNumber(date) とする。
  8. newDateMakeDate(MakeDay(y, m, dt), TimeWithinDay(t)) とする。
  9. vTimeClip(newDate) とする。
  10. dateObject.[[DateValue]]v を設定する。
  11. v を返す。

このメソッドの "length" プロパティは 3𝔽 である。

Note

month が存在しない場合、このメソッドは getUTCMonth() の値が指定されたかのように振る舞う。date が存在しない場合は getUTCDate() の値が指定されたかのように振る舞う。

21.4.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. h を ? ToNumber(hour) とする。
  5. min が存在するなら m を ? ToNumber(min) とする。
  6. sec が存在するなら s を ? ToNumber(sec) とする。
  7. ms が存在するなら milli を ? ToNumber(ms) とする。
  8. tNaN なら NaN を返す。
  9. min が存在しない場合、mMinFromTime(t) とする。
  10. sec が存在しない場合、sSecFromTime(t) とする。
  11. ms が存在しない場合、millimsFromTime(t) とする。
  12. dateMakeDate(Day(t), MakeTime(h, m, s, milli)) とする。
  13. vTimeClip(date) とする。
  14. dateObject.[[DateValue]]v を設定する。
  15. v を返す。

このメソッドの "length" プロパティは 4𝔽 である。

Note

min が存在しない場合、このメソッドは getUTCMinutes() の値が指定されたかのように振る舞う。sec が存在しない場合は getUTCSeconds() の値が指定されたかのように振る舞う。ms が存在しない場合は getUTCMilliseconds() の値が指定されたかのように振る舞う。

21.4.4.31 Date.prototype.setUTCMilliseconds ( ms )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. ms を ? ToNumber(ms) に設定する。
  5. tNaN なら NaN を返す。
  6. timeMakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms) とする。
  7. vTimeClip(MakeDate(Day(t), time)) とする。
  8. dateObject.[[DateValue]]v を設定する。
  9. v を返す。

21.4.4.32 Date.prototype.setUTCMinutes ( min [ , sec [ , ms ] ] )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. m を ? ToNumber(min) とする。
  5. sec が存在するなら s を ? ToNumber(sec) とする。
  6. ms が存在するなら milli を ? ToNumber(ms) とする。
  7. tNaN なら NaN を返す。
  8. sec が存在しない場合、sSecFromTime(t) とする。
  9. ms が存在しない場合、millimsFromTime(t) とする。
  10. dateMakeDate(Day(t), MakeTime(HourFromTime(t), m, s, milli)) とする。
  11. vTimeClip(date) とする。
  12. dateObject.[[DateValue]]v を設定する。
  13. v を返す。

このメソッドの "length" プロパティは 3𝔽 である。

Note

sec が存在しない場合、このメソッドは getUTCSeconds() の値が指定されたかのように振る舞う。ms が存在しない場合は getUTCMilliseconds() の値が指定されたかのように振る舞う。

21.4.4.33 Date.prototype.setUTCMonth ( month [ , date ] )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. m を ? ToNumber(month) とする。
  5. date が存在するなら dt を ? ToNumber(date) とする。
  6. tNaN なら NaN を返す。
  7. date が存在しない場合、dtDateFromTime(t) とする。
  8. newDateMakeDate(MakeDay(YearFromTime(t), m, dt), TimeWithinDay(t)) とする。
  9. vTimeClip(newDate) とする。
  10. dateObject.[[DateValue]]v を設定する。
  11. v を返す。

このメソッドの "length" プロパティは 2𝔽 である。

Note

date が存在しない場合、このメソッドは getUTCDate() の値が指定されたかのように振る舞う。

21.4.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. s を ? ToNumber(sec) とする。
  5. ms が存在するなら milli を ? ToNumber(ms) とする。
  6. tNaN なら NaN を返す。
  7. ms が存在しない場合、millimsFromTime(t) とする。
  8. dateMakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), s, milli)) とする。
  9. vTimeClip(date) とする。
  10. dateObject.[[DateValue]]v を設定する。
  11. v を返す。

このメソッドの "length" プロパティは 2𝔽 である。

Note

ms が存在しない場合、このメソッドは getUTCMilliseconds() の値が指定されたかのように振る舞う。

21.4.4.35 Date.prototype.toDateString ( )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tvdateObject.[[DateValue]] とする。
  4. tvNaN なら "Invalid Date" を返す。
  5. tLocalTime(tv) とする。
  6. DateString(t) を返す。

21.4.4.36 Date.prototype.toISOString ( )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tvdateObject.[[DateValue]] とする。
  4. tvNaN なら RangeError 例外をスローする。
  5. アサート: tv整数値である。
  6. tvDate Time String Format で表現できない年に該当するなら RangeError 例外をスローする。
  7. tvDate Time String Format に従ったUTC時刻表現(全ての書式要素およびUTCオフセット "Z" を含む)を返す。

21.4.4.37 Date.prototype.toJSON ( key )

このメソッドは JSON.stringify (25.5.2) で利用するための Date の文字列表現を提供する。

呼び出されると以下の手順を実行する:

  1. O を ? ToObject(this の値) とする。
  2. tv を ? ToPrimitive(O, number) とする。
  3. tv が数値かつ有限でなければ null を返す。
  4. ? Invoke(O, "toISOString") を返す。
Note 1

この引数は無視される。

Note 2

このメソッドは意図的にジェネリックであり、this の値が Date であることを要求しない。そのため他のオブジェクトに転送してメソッドとして利用できる。ただしその場合、toISOString メソッドが必要である。

21.4.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Internationalization API を含む ECMAScript 実装はこのメソッドを ECMA-402 仕様に従って実装しなければならない。ECMA-402 API を含まない実装の場合、以下の仕様が用いられる:

このメソッドは文字列値を返す。その内容は実装定義だが、現在のタイムゾーンにおける Date の「日付」部分をホスト環境の現在のロケールの慣習に従った便利で人間に読みやすい形で表現することを意図している。

このメソッドのオプションパラメータの意味は ECMA-402 仕様で定義されている。ECMA-402 を含まない実装ではこれらのパラメータ位置を他の用途に使ってはならない。

21.4.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Internationalization API を含む ECMAScript 実装はこのメソッドを ECMA-402 仕様に従って実装しなければならない。ECMA-402 API を含まない実装の場合、以下の仕様が用いられる:

このメソッドは文字列値を返す。その内容は実装定義だが、現在のタイムゾーンにおける Date をホスト環境の現在のロケールの慣習に従った便利で人間に読みやすい形で表現することを意図している。

このメソッドのオプションパラメータの意味は ECMA-402 仕様で定義されている。ECMA-402 を含まない実装ではこれらのパラメータ位置を他の用途に使ってはならない。

21.4.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Internationalization API を含む ECMAScript 実装はこのメソッドを ECMA-402 仕様に従って実装しなければならない。ECMA-402 API を含まない実装の場合、以下の仕様が用いられる:

このメソッドは文字列値を返す。その内容は実装定義だが、現在のタイムゾーンにおける Date の「時刻」部分をホスト環境の現在のロケールの慣習に従った便利で人間に読みやすい形で表現することを意図している。

このメソッドのオプションパラメータの意味は ECMA-402 仕様で定義されている。ECMA-402 を含まない実装ではこれらのパラメータ位置を他の用途に使ってはならない。

21.4.4.41 Date.prototype.toString ( )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tvdateObject.[[DateValue]] とする。
  4. ToDateString(tv) を返す。
Note 1

d.[[DateValue]] が 1000 で割り切れる任意の Date d について、Date.parse(d.toString()) の結果は d.valueOf() と等しい。21.4.3.2 を参照。

Note 2

このメソッドはジェネリックではなく、this の値が Date でない場合は TypeError 例外をスローする。そのため他のオブジェクトに転送してメソッドとして利用することはできない。

21.4.4.41.1 TimeString ( tv )

The abstract operation TimeString takes argument tv (a Number, but not NaN) and returns a String. It performs the following steps when called:

  1. hourToZeroPaddedDecimalString((HourFromTime(tv)), 2) とする。
  2. minuteToZeroPaddedDecimalString((MinFromTime(tv)), 2) とする。
  3. secondToZeroPaddedDecimalString((SecFromTime(tv)), 2) とする。
  4. hour, ":", minute, ":", second, コードユニット 0x0020 (スペース), "GMT" を連結した文字列を返す。

21.4.4.41.2 DateString ( tv )

The abstract operation DateString takes argument tv (a Number, but not NaN) and returns a String. It performs the following steps when called:

  1. weekdayTable 63WeekDay(tv) の番号に対応する名前とする。
  2. monthTable 64MonthFromTime(tv) の番号に対応する名前とする。
  3. dayToZeroPaddedDecimalString((DateFromTime(tv)), 2) とする。
  4. yvYearFromTime(tv) とする。
  5. yv+0𝔽 または yv > +0𝔽 なら yearSign を空文字列に、そうでなければ "-" にする。
  6. paddedYearToZeroPaddedDecimalString(abs((yv)), 4) とする。
  7. weekday, コードユニット 0x0020 (スペース), month, コードユニット 0x0020 (スペース), day, コードユニット 0x0020 (スペース), yearSign, paddedYear を連結した文字列を返す。
Table 63: 曜日名
Number Name
+0𝔽 "Sun"
1𝔽 "Mon"
2𝔽 "Tue"
3𝔽 "Wed"
4𝔽 "Thu"
5𝔽 "Fri"
6𝔽 "Sat"
Table 64: 月名
Number Name
+0𝔽 "Jan"
1𝔽 "Feb"
2𝔽 "Mar"
3𝔽 "Apr"
4𝔽 "May"
5𝔽 "Jun"
6𝔽 "Jul"
7𝔽 "Aug"
8𝔽 "Sep"
9𝔽 "Oct"
10𝔽 "Nov"
11𝔽 "Dec"

21.4.4.41.3 TimeZoneString ( tv )

The abstract operation TimeZoneString takes argument tv (an integral Number) and returns a String. It performs the following steps when called:

  1. systemTimeZoneIdentifierSystemTimeZoneIdentifier() とする。
  2. IsTimeZoneOffsetString(systemTimeZoneIdentifier) が true なら
    1. offsetNsParseTimeZoneOffsetString(systemTimeZoneIdentifier) とする。
  3. それ以外の場合
    1. offsetNsGetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, ((tv) × 106)) とする。
  4. offset𝔽(truncate(offsetNs / 106)) とする。
  5. offset+0𝔽 または offset > +0𝔽 なら
    1. offsetSign"+" とする。
    2. absOffsetoffset とする。
  6. それ以外の場合
    1. offsetSign"-" とする。
    2. absOffset を -offset とする。
  7. offsetMinToZeroPaddedDecimalString((MinFromTime(absOffset)), 2) とする。
  8. offsetHourToZeroPaddedDecimalString((HourFromTime(absOffset)), 2) とする。
  9. tzName を空文字列またはコードユニット 0x0020 (スペース)、0x0028 (左括弧)、実装定義のタイムゾーン名、0x0029 (右括弧) を連結した文字列のいずれかとする。
  10. offsetSign, offsetHour, offsetMin, tzName を連結した文字列を返す。

21.4.4.41.4 ToDateString ( tv )

The abstract operation ToDateString takes argument tv (an integral Number or NaN) and returns a String. It performs the following steps when called:

  1. tvNaN なら "Invalid Date" を返す。
  2. tLocalTime(tv) とする。
  3. DateString(t)、コードユニット 0x0020 (スペース)、TimeString(t)、TimeZoneString(tv) を連結した文字列を返す。

21.4.4.42 Date.prototype.toTimeString ( )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tvdateObject.[[DateValue]] とする。
  4. tvNaN なら "Invalid Date" を返す。
  5. tLocalTime(tv) とする。
  6. TimeString(t) と TimeZoneString(tv) を連結した文字列を返す。

21.4.4.43 Date.prototype.toUTCString ( )

このメソッドは this 値に対応する時点を表す文字列値を返す。文字列の形式は RFC 7231 の "HTTP-date" をベースとし、ECMAScript Dates でサポートされる全範囲の時刻を一般化している。

呼び出されると以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tvdateObject.[[DateValue]] とする。
  4. tvNaN なら "Invalid Date" を返す。
  5. weekdayTable 63WeekDay(tv) の番号に対応する名前とする。
  6. monthTable 64MonthFromTime(tv) の番号に対応する名前とする。
  7. dayToZeroPaddedDecimalString((DateFromTime(tv)), 2) とする。
  8. yvYearFromTime(tv) とする。
  9. yv+0𝔽 または yv > +0𝔽 なら yearSign を空文字列に、そうでなければ "-" にする。
  10. paddedYearToZeroPaddedDecimalString(abs((yv)), 4) とする。
  11. weekday, ",", コードユニット 0x0020 (スペース), day, コードユニット 0x0020 (スペース), month, コードユニット 0x0020 (スペース), yearSign, paddedYear, コードユニット 0x0020 (スペース), TimeString(tv) を連結した文字列を返す。

21.4.4.44 Date.prototype.valueOf ( )

このメソッドは呼び出された時、以下の手順を実行する:

  1. dateObjectthis の値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. dateObject.[[DateValue]] を返す。

21.4.4.45 Date.prototype [ %Symbol.toPrimitive% ] ( hint )

このメソッドは ECMAScript の演算子によって Date をプリミティブ値へ変換するために呼び出される。hint の許可される値は "default""number""string" である。Date は組み込み ECMAScript オブジェクトの中で唯一 "default""string" と同等に扱う。他の組み込みオブジェクトは "default""number" と同等に扱う。

呼び出されると以下の手順を実行する:

  1. Othis の値とする。
  2. O がオブジェクトでなければ TypeError 例外をスローする。
  3. hint"string" または "default" なら
    1. tryFirststring とする。
  4. それ以外で hint"number" なら
    1. tryFirstnumber とする。
  5. それ以外の場合
    1. TypeError 例外をスローする。
  6. OrdinaryToPrimitive(O, tryFirst) を返す。

このプロパティの属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } である。

このメソッドの "name" プロパティの値は "[Symbol.toPrimitive]" である。

21.4.5 Date インスタンスのプロパティ

Date インスタンスは Date プロトタイプオブジェクトからプロパティを継承する通常のオブジェクトである。Date インスタンスは [[DateValue]] 内部スロットも持ち、[[DateValue]] 内部スロットはこの Date が表す時刻値である。