ページ表示設定

21 数値と日付

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. primitive を ? ToNumeric(value) とする。
    2. primitive が BigInt である場合、n を 𝔽(ℝ(primitive)) とする。
    3. そうでない場合、n を primitive とする。
  2. そうでない場合、
    1. n を +0𝔽 とする。
  3. NewTarget が undefined である場合、n を返す。
  4. obj を ? OrdinaryCreateFromConstructor(NewTarget, "%Number.prototype%", « [[NumberData]] ») とする。
  5. obj.[[NumberData]] を n に設定する。
  6. obj を返す。

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 である場合、true を返す。
  2. false を返す。

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. number が NaN である場合、true を返す。
  3. false を返す。
注

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

21.1.2.5 Number.isSafeInteger ( number )

注

整数 n が「安全な整数」であるのは、n に対する Number 値が他のいかなる整数に対する Number 値でもない場合に限る。

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

  1. number が整数 Number である場合、
    1. abs(ℝ(number)) ≤ 253 - 1 である場合、true を返す。
  2. false を返す。

21.1.2.6 Number.MAX_SAFE_INTEGER

注

IEEE 754-2019 の精度制限によって必要となる丸め動作により、Number.MAX_SAFE_INTEGER より大きいすべての整数に対する Number 値は、少なくとも 1 つの別の整数と共有される。したがって、そのような絶対値の大きい整数は安全ではなく、Number 値として正確に表現できることも、互いに区別できることさえも保証されない。たとえば、9007199254740992 と 9007199254740993 はどちらも 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

注

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 倍精度二進表現では、可能な最小値は非正規化数である。実装が非正規化値をサポートしない場合、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]] 内部スロットを持つオブジェクトでなければならない。

メソッドの仕様内における「この Number 値」という語句は、そのメソッド呼び出しの this 値を引数として抽象演算 ThisNumberValue を呼び出すことによって返される結果を指す。

21.1.3.1 Number.prototype.constructor

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

21.1.3.2 Number.prototype.toExponential ( fractionDigits )

このメソッドは、この Number 値を、仮数の小数点の前に 1 桁、仮数の小数点の後に fractionDigits 桁を持つ 10 進指数表記で表した String を返す。fractionDigits が undefined の場合、Number を一意に特定するために必要なだけの仮数桁を含む(この場合 Number が常に指数表記で出力されることを除けば ToString と同様である)。

呼び出されたとき、次の手順を実行する。

  1. number を ? ThisNumberValue(this 値) とする。
  2. fractionCount を ? ToIntegerOrInfinity(fractionDigits) とする。
  3. 表明: fractionDigits が undefined である場合、fractionCount は 0 である。
  4. number が有限 Number でない場合、Number::toString(number, 10) を返す。
  5. fractionCount が整数でない場合、RangeError 例外を投げる。
  6. fractionCount < 0 または fractionCount > 100 である場合、RangeError 例外を投げる。
  7. number を ℝ(number) に設定する。
  8. sign を空の String とする。
  9. number < 0 である場合、
    1. sign を "-" に設定する。
    2. number を -number に設定する。
  10. number = 0 である場合、
    1. significand を、コード単位 0x0030 (DIGIT ZERO) が fractionCount + 1 個並んだ String 値とする。
    2. exponent を 0 とする。
  11. それ以外の場合、
    1. fractionDigits が undefined でない場合、
      1. 10fractionCount ≤ intSignificand < 10fractionCount + 1 であり、intSignificand × 10exponent - fractionCount - number が可能な限り 0 に近くなるような整数 exponent および intSignificand とする。そのような exponent と intSignificand の組が 2 つある場合、intSignificand × 10exponent - fractionCount が大きい方の exponent と intSignificand を選ぶ。
    2. それ以外の場合、
      1. ff ≥ 0、10ff ≤ intSignificand < 10ff + 1、𝔽(intSignificand × 10exponent - ff) が 𝔽(number) であり、ff が可能な限り小さくなるような整数 exponent、intSignificand、および ff とする。intSignificand の 10 進表現は ff + 1 桁を持ち、intSignificand は 10 で割り切れず、intSignificand の最下位桁はこれらの基準によって必ずしも一意に決定されないことに注意。
      2. fractionCount を ff に設定する。
    3. significand を、intSignificand の 10 進表現の数字からなる String 値(順番どおりで、先頭のゼロを含まない)とする。
  12. fractionCount ≠ 0 である場合、
    1. intPart を significand の最初のコード単位とする。
    2. fractionalPart を significand の残りの fractionCount 個のコード単位とする。
    3. significand を intPart、"."、および fractionalPart の文字列連結に設定する。
  13. exponent = 0 である場合、
    1. exponentSign を "+" とする。
    2. exponentDigits を "0" とする。
  14. それ以外の場合、
    1. exponent > 0 である場合、
      1. exponentSign を "+" とする。
    2. それ以外の場合、
      1. 表明: exponent < 0 である。
      2. exponentSign を "-" とする。
      3. exponent を -exponent に設定する。
    3. exponentDigits を、exponent の 10 進表現の数字からなる String 値(順番どおりで、先頭のゼロを含まない)とする。
  15. significand を significand、"e"、exponentSign、および exponentDigits の文字列連結に設定する。
  16. sign と significand の文字列連結を返す。
注

上記の規則で要求されるよりも正確な変換を提供する実装については、手順 11.b.i の次の代替版を指針として使用することを推奨する。

  1. ff ≥ 0、10ff ≤ intSignificand < 10ff + 1、𝔽(intSignificand × 10exponent - ff) が 𝔽(number) であり、ff が可能な限り小さくなるような整数 exponent、intSignificand、および ff とする。intSignificand に複数の可能性がある場合、𝔽(intSignificand × 10exponent - ff) が 𝔽(number) に最も近くなる intSignificand を選択する。そのような intSignificand の値が 2 つある場合、偶数である方を選択する。

21.1.3.3 Number.prototype.toFixed ( fractionDigits )

注 1

このメソッドは、この Number 値を、小数点の後に fractionDigits 桁を持つ 10 進固定小数点表記で表した String を返す。fractionDigits が undefined の場合、0 が仮定される。

呼び出されたとき、次の手順を実行する。

  1. number を ? ThisNumberValue(this 値) とする。
  2. fractionCount を ? ToIntegerOrInfinity(fractionDigits) とする。
  3. 表明: fractionDigits が undefined である場合、fractionCount は 0 である。
  4. fractionCount が整数でない場合、RangeError 例外を投げる。
  5. fractionCount < 0 または fractionCount > 100 である場合、RangeError 例外を投げる。
  6. number が有限 Number でない場合、Number::toString(number, 10) を返す。
  7. number を ℝ(number) に設定する。
  8. sign を空の String とする。
  9. number < 0 である場合、
    1. sign を "-" に設定する。
    2. number を -number に設定する。
  10. number ≥ 1021 である場合、
    1. digitString を ! ToString(𝔽(number)) とする。
  11. それ以外の場合、
    1. intValue / 10fractionCount - number が可能な限り 0 に近くなる整数 intValue とする。そのような intValue が 2 つある場合、大きい方の intValue を選ぶ。
    2. intValue = 0 である場合、digitString を "0" とする。それ以外の場合、digitString を intValue の 10 進表現の数字からなる String 値(順番どおりで、先頭のゼロを含まない)とする。
    3. fractionCount ≠ 0 である場合、
      1. digitCount を digitString の長さとする。
      2. digitCount ≤ fractionCount である場合、
        1. zeroPad を、コード単位 0x0030 (DIGIT ZERO) が fractionCount + 1 - digitCount 個並んだ String 値とする。
        2. digitString を zeroPad と digitString の文字列連結に設定する。
        3. digitCount を fractionCount + 1 に設定する。
      3. intPart を digitString の最初の digitCount - fractionCount 個のコード単位とする。
      4. fractionalPart を digitString の残りの fractionCount 個のコード単位とする。
      5. digitString を intPart、"."、および fractionalPart の文字列連結に設定する。
  12. sign と digitString の文字列連結を返す。
注 2

toString は数を隣接する Number 値と区別するために十分な有効数字だけを出力するため、一部の値については toFixed の出力の方が toString より精密になる場合がある。たとえば、

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

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

ECMA-402 国際化 API を含む ECMAScript 実装は、ECMA-402 で規定されているとおりにこのメソッドを実装しなければならない。それ以外の場合、このメソッドについて次の仕様が使用される。

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

このメソッドの省略可能なパラメータの意味は ECMA-402 で定義される。ECMA-402 のサポートを含まない実装は、それらのパラメータ位置を他の目的に使用してはならない。

21.1.3.5 Number.prototype.toPrecision ( precision )

このメソッドは、この Number 値を、仮数の小数点の前に 1 桁、仮数の小数点の後に precision - 1 桁を持つ 10 進指数表記、または precision 桁の有効数字を持つ 10 進固定表記のいずれかで表した String を返す。precision が undefined の場合、代わりに ToString を呼び出す。

呼び出されたとき、次の手順を実行する。

  1. number を ? ThisNumberValue(this 値) とする。
  2. precision が undefined である場合、! ToString(number) を返す。
  3. precisionCount を ? ToIntegerOrInfinity(precision) とする。
  4. number が有限 Number でない場合、Number::toString(number, 10) を返す。
  5. precisionCount が整数でない場合、RangeError 例外を投げる。
  6. precisionCount < 1 または precisionCount > 100 である場合、RangeError 例外を投げる。
  7. number を ℝ(number) に設定する。
  8. sign を空の String とする。
  9. number < 0 である場合、
    1. sign をコード単位 0x002D (HYPHEN-MINUS) に設定する。
    2. number を -number に設定する。
  10. number = 0 である場合、
    1. significand を、コード単位 0x0030 (DIGIT ZERO) が precisionCount 個並んだ String 値とする。
    2. exponent を 0 とする。
  11. それ以外の場合、
    1. 10precisionCount - 1 ≤ intSignificand < 10precisionCount であり、intSignificand × 10exponent - precisionCount + 1 - number が可能な限り 0 に近くなるような整数 exponent および intSignificand とする。そのような exponent と intSignificand の組が 2 つある場合、intSignificand × 10exponent - precisionCount + 1 が大きい方の exponent と intSignificand を選ぶ。
    2. significand を、intSignificand の 10 進表現の数字からなる String 値(順番どおりで、先頭のゼロを含まない)とする。
    3. exponent < -6 または exponent ≥ precisionCount である場合、
      1. 表明: exponent ≠ 0 である。
      2. precisionCount ≠ 1 である場合、
        1. intPart を significand の最初のコード単位とする。
        2. fractionalPart を significand の残りの precisionCount - 1 個のコード単位とする。
        3. significand を intPart、"."、および fractionalPart の文字列連結に設定する。
      3. exponent > 0 である場合、
        1. exponentSign をコード単位 0x002B (PLUS SIGN) とする。
      4. それ以外の場合、
        1. 表明: exponent < 0 である。
        2. exponentSign をコード単位 0x002D (HYPHEN-MINUS) とする。
        3. exponent を -exponent に設定する。
      5. exponentDigits を、exponent の 10 進表現の数字からなる String 値(順番どおりで、先頭のゼロを含まない)とする。
      6. sign、significand、コード単位 0x0065 (LATIN SMALL LETTER E)、exponentSign、および exponentDigits の文字列連結を返す。
  12. exponent = precisionCount - 1 である場合、sign と significand の文字列連結を返す。
  13. exponent ≥ 0 である場合、
    1. significand を、significand の最初の exponent + 1 個のコード単位、コード単位 0x002E (FULL STOP)、および significand の残りの precisionCount - (exponent + 1) 個のコード単位の文字列連結に設定する。
  14. それ以外の場合、
    1. significand を、コード単位 0x0030 (DIGIT ZERO)、コード単位 0x002E (FULL STOP)、コード単位 0x0030 (DIGIT ZERO) の -(exponent + 1) 個の繰り返し、および String significand の文字列連結に設定する。
  15. sign と significand の文字列連結を返す。

21.1.3.6 Number.prototype.toString ( [ radix ] )

注

省略可能な radix は、2𝔽 から 36𝔽 までの両端を含む区間にある整数 Number 値であるべきである。radix が undefined の場合、10𝔽 が radix の値として使用される。

このメソッドは、呼び出されたときに次の手順を実行する。

  1. x を ? ThisNumberValue(this 値) とする。
  2. radix が undefined である場合、radixMV を 10 とする。
  3. それ以外の場合、radixMV を ? SnapToInteger(radix, truncate, 2, 36) とする。
  4. Number::toString(x, radixMV) を返す。

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

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

21.1.3.7 Number.prototype.valueOf ( )

  1. ? ThisNumberValue(this 値) を返す。

21.1.3.7.1 ThisNumberValue ( arg )

抽象操作 ThisNumberValue。引数 arg (ECMAScript 言語値)。戻り値:Number を含む通常完了または throw 完了のいずれか。 呼び出されると、次の手順を実行する。

  1. arg が Number である場合、arg を返す。
  2. arg が Object であり、arg が [[NumberData]] 内部スロットを持つ場合、
    1. number を arg.[[NumberData]] とする。
    2. 表明: number は Number である。
    3. number を返す。
  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. primitive を ? ToPrimitive(value, number) とする。
  3. primitive が Number である場合、? NumberToBigInt(primitive) を返す。
  4. ? ToBigInt(primitive) を返す。

21.2.1.1.1 NumberToBigInt ( number )

抽象操作 NumberToBigInt。引数 number (Number)。戻り値:BigInt を含む通常完了または throw 完了のいずれか。 呼び出されると、次の手順を実行する。

  1. number が整数 Number でない場合、RangeError 例外を投げる。
  2. ℤ(ℝ(number)) を返す。

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

BigInt コンストラクタは、次のとおりである。

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

21.2.2.1 BigInt.asIntN ( bits, bigint )

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

  1. bits を ? ToIndex(bits) に設定する。
  2. bigint を ? ToBigInt(bigint) に設定する。
  3. remainder を ℝ(bigint) modulo 2bits とする。
  4. remainder ≥ 2bits - 1 である場合、ℤ(remainder - 2bits) を返す。
  5. ℤ(remainder) を返す。

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]] 内部スロットを持たない。
  • 値が %Object.prototype% である [[Prototype]] 内部スロットを持つ。

メソッドの仕様内における「この BigInt 値」という語句は、そのメソッド呼び出しの 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 で規定されているとおりにこのメソッドを実装しなければならない。それ以外の場合、このメソッドについて次の仕様が使用される。

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

このメソッドの省略可能なパラメータの意味は ECMA-402 で定義される。ECMA-402 のサポートを含まない実装は、それらのパラメータ位置を他の目的に使用してはならない。

21.2.3.3 BigInt.prototype.toString ( [ radix ] )

注

省略可能な radix は、2𝔽 から 36𝔽 までの両端を含む区間にある整数 Number 値であるべきである。radix が undefined の場合、10𝔽 が radix の値として使用される。

このメソッドは、呼び出されたときに次の手順を実行する。

  1. x を ? ThisBigIntValue(this 値) とする。
  2. radix が undefined である場合、radixMV を 10 とする。
  3. それ以外の場合、radixMV を ? SnapToInteger(radix, truncate, 2, 36) とする。
  4. BigInt::toString(x, radixMV) を返す。

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

21.2.3.4 BigInt.prototype.valueOf ( )

  1. ? ThisBigIntValue(this 値) を返す。

21.2.3.4.1 ThisBigIntValue ( arg )

抽象操作 ThisBigIntValue。引数 arg (ECMAScript 言語値)。戻り値:BigInt を含む通常完了または throw 完了のいずれか。 呼び出されると、次の手順を実行する。

  1. arg が BigInt である場合、arg を返す。
  2. arg が Object であり、arg が [[BigIntData]] 内部スロットを持つ場合、
    1. 表明: arg.[[BigIntData]] は BigInt である。
    2. arg.[[BigIntData]] を返す。
  3. TypeError 例外を投げる。

21.2.3.5 BigInt.prototype [ %Symbol.toStringTag% ]

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

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

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

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

21.3 Math オブジェクト

Math オブジェクトは、次のとおりである。

  • %Math% である。
  • グローバルオブジェクトの "Math" プロパティの初期値である。
  • 通常のオブジェクトである。
  • 値が %Object.prototype% である [[Prototype]] 内部スロットを持つ。
  • 関数オブジェクトではない。
  • [[Construct]] 内部メソッドを持たず、new 演算子を使用してコンストラクタとして使用することはできない。
  • [[Call]] 内部メソッドを持たず、関数として呼び出すことはできない。
注

この仕様において、「x に対する Number 値」という語句は、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 } を持つ。

注

Math.LOG10E の値は、Math.LN10 の値の逆数におよそ等しい。

21.3.1.5 Math.LOG2E

自然対数の底である e の底 2 の対数に対する Number 値であり、この値はおよそ 1.4426950408889634 である。

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

注

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

½ の平方根に対する Number 値であり、およそ 0.7071067811865476 である。

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

注

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% プロパティの初期値は String 値 "Math" である。

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

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

注

acos、acosh、asin、asinh、atan、atanh、atan2、cbrt、cos、cosh、exp、expm1、hypot、log、log1p、log2、log10、pow、random、sin、sinh、tan、および tanh の各関数の動作は、対象となる境界ケースを表す特定の引数値に対して特定の結果を要求することを除き、ここでは厳密には規定されない。他の引数値について、これらの関数はよく知られた数学関数の結果の近似値を計算することを意図しているが、近似アルゴリズムの選択にはある程度の自由が認められる。一般的な意図は、実装者が、あるハードウェアプラットフォーム上の ECMAScript に対して、そのプラットフォーム上の C プログラマが利用できるものと同じ数学ライブラリを使用できるようにすることである。

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

21.3.2.1 Math.abs ( x )

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

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN である場合、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. n が NaN、n > 1𝔽、または n < -1𝔽 である場合、NaN を返す。
  3. n が 1𝔽 である場合、+0𝔽 を返す。
  4. ℝ(n) の逆余弦を表す、実装によって近似された Number 値を返す。

21.3.2.3 Math.acosh ( x )

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

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN または +∞𝔽 のいずれかである場合、n を返す。
  3. n が 1𝔽 である場合、+0𝔽 を返す。
  4. n < 1𝔽 である場合、NaN を返す。
  5. ℝ(n) の逆双曲線余弦を表す、実装によって近似された Number 値を返す。

21.3.2.4 Math.asin ( x )

この関数は x の逆正弦を返す。結果はラジアンで表され、𝔽(-π / 2) から 𝔽(π / 2) までの両端を含む区間にある。

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN、+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 が有限 Number でないか、または n が +0𝔽 または -0𝔽 のいずれかである場合、n を返す。
  3. ℝ(n) の逆双曲線正弦を表す、実装によって近似された Number 値を返す。

21.3.2.6 Math.atan ( x )

この関数は x の逆正接を返す。結果はラジアンで表され、𝔽(-π / 2) から 𝔽(π / 2) までの両端を含む区間にある。

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN、+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. n が NaN、+0𝔽、または -0𝔽 のいずれかである場合、n を返す。
  3. n > 1𝔽 または n < -1𝔽 である場合、NaN を返す。
  4. n が 1𝔽 である場合、+∞𝔽 を返す。
  5. n が -1𝔽 である場合、-∞𝔽 を返す。
  6. ℝ(n) の逆双曲線正接を表す、実装によって近似された Number 値を返す。

21.3.2.8 Math.atan2 ( y, x )

この関数は引数 y と x の商 y / x の逆正接を返し、y と x の符号を使用して結果の象限を決定する。2 引数の逆正接関数では、y という名前の引数が最初で、x という名前の引数が 2 番目であることは意図的かつ伝統的であることに注意。結果はラジアンで表され、-π から +π までの両端を含む区間にある。

呼び出されたとき、次の手順を実行する。

  1. ny を ? ToNumber(y) とする。
  2. nx を ? ToNumber(x) とする。
  3. ny が NaN または nx が NaN である場合、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. 表明: ny は有限 Number であり、+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. 表明: nx は有限 Number であり、+0𝔽 でも -0𝔽 でもない。
  12. result を abs(ℝ(ny) / ℝ(nx)) の逆正接とする。
  13. nx < -0𝔽 である場合、
    1. ny > +0𝔽 である場合、result を π - result に設定する。
    2. それ以外の場合、result を -π + result に設定する。
  14. それ以外の場合、
    1. ny < -0𝔽 である場合、result を -result に設定する。
  15. result を表す、実装によって近似された Number 値を返す。

21.3.2.9 Math.cbrt ( x )

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

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が有限 Number でないか、または n が +0𝔽 または -0𝔽 のいずれかである場合、n を返す。
  3. ℝ(n) の立方根を表す、実装によって近似された Number 値を返す。

21.3.2.10 Math.ceil ( x )

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

呼び出されたとき、次の手順を実行する。

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

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

21.3.2.11 Math.clz32 ( x )

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

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

n が +0𝔽 または -0𝔽 のいずれかである場合、このメソッドは 32𝔽 を返す。n の 32 ビット二進符号化の最上位ビットが 1 である場合、このメソッドは +0𝔽 を返す。

21.3.2.12 Math.cos ( x )

この関数は x の余弦を返す。引数はラジアンで表される。

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が有限 Number でない場合、NaN を返す。
  3. n が +0𝔽 または -0𝔽 のいずれかである場合、1𝔽 を返す。
  4. ℝ(n) の余弦を表す、実装によって近似された Number 値を返す。

21.3.2.13 Math.cosh ( x )

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

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN である場合、NaN を返す。
  3. n が +∞𝔽 または -∞𝔽 のいずれかである場合、+∞𝔽 を返す。
  4. n が +0𝔽 または -0𝔽 のいずれかである場合、1𝔽 を返す。
  5. ℝ(n) の双曲線余弦を表す、実装によって近似された Number 値を返す。
注

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

21.3.2.14 Math.exp ( x )

この関数は x の指数関数(自然対数の底である e を x 乗したもの)を返す。

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN または +∞𝔽 のいずれかである場合、n を返す。
  3. n が +0𝔽 または -0𝔽 のいずれかである場合、1𝔽 を返す。
  4. n が -∞𝔽 である場合、+0𝔽 を返す。
  5. ℝ(n) の指数関数を表す、実装によって近似された Number 値を返す。

21.3.2.15 Math.expm1 ( x )

この関数は、x の指数関数(自然対数の底である e を x 乗したもの)から 1 を引いた結果を返す。結果は、x の値が 0 に近い場合でも正確になるような方法で計算される。

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN、+0𝔽、-0𝔽、または +∞𝔽 のいずれかである場合、n を返す。
  3. n が -∞𝔽 である場合、-1𝔽 を返す。
  4. exp を ℝ(n) の指数関数とする。
  5. exp - 1 を表す、実装によって近似された Number 値を返す。

21.3.2.16 Math.floor ( x )

この関数は、x 以下である最大の(+∞ に最も近い)整数 Number 値を返す。x がすでに整数 Number である場合、結果は x である。

呼び出されたとき、次の手順を実行する。

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

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

21.3.2.17 Math.fround ( x )

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

  1. n を ? ToNumber(x) とする。
  2. n が NaN である場合、NaN を返す。
  3. n が +0𝔽、-0𝔽、+∞𝔽、または -∞𝔽 のいずれかである場合、n を返す。
  4. n32 を、roundTiesToEven モードを使用して n を IEEE 754-2019 binary32 形式に変換した結果とする。
  5. n64 を、n32 を IEEE 754-2019 binary64 形式に変換した結果とする。
  6. n64 に対応する ECMAScript Number 値を返す。

21.3.2.18 Math.f16round ( x )

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

  1. n を ? ToNumber(x) とする。
  2. n が NaN である場合、NaN を返す。
  3. n が +0𝔽、-0𝔽、+∞𝔽、または -∞𝔽 のいずれかである場合、n を返す。
  4. n16 を、roundTiesToEven モードを使用して n を IEEE 754-2019 binary16 形式に変換した結果とする。
  5. n64 を、n16 を IEEE 754-2019 binary64 形式に変換した結果とする。
  6. n64 に対応する ECMAScript Number 値を返す。
注

二重丸めの可能性があるため、この演算は 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 の下で実行した場合に生成される値になるようにすることで、明示的に処理できる。調整された値を roundTiesToEven の下で binary16 にキャストすると、正しい値が生成される。

21.3.2.19 Math.hypot ( ...args )

0 個以上の引数を与えると、この関数はその引数の平方の総和の平方根を返す。

呼び出されたとき、次の手順を実行する。

  1. coerced を新しい空の List とする。
  2. args の各要素 arg について、
    1. n を ? ToNumber(arg) とする。
    2. n を coerced に追加する。
  3. coerced の各要素 number について、
    1. number が +∞𝔽 または -∞𝔽 のいずれかである場合、+∞𝔽 を返す。
  4. onlyZero を true とする。
  5. coerced の各要素 number について、
    1. number が NaN である場合、NaN を返す。
    2. number が +0𝔽 でも -0𝔽 でもない場合、onlyZero を false に設定する。
  6. onlyZero が true である場合、+0𝔽 を返す。
  7. coerced の各要素の数学値の平方の総和の平方根を表す、実装によって近似された Number 値を返す。

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

注

この関数が 2 個以上の引数で呼び出されたときに素朴な実装で発生しやすいオーバーフローおよびアンダーフローによる精度損失を避けるよう、実装では注意すべきである。

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) を返す。
  5. 𝔽(product) を返す。

21.3.2.21 Math.log ( x )

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

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN または +∞𝔽 のいずれかである場合、n を返す。
  3. n が 1𝔽 である場合、+0𝔽 を返す。
  4. n が +0𝔽 または -0𝔽 のいずれかである場合、-∞𝔽 を返す。
  5. n < -0𝔽 である場合、NaN を返す。
  6. ln(ℝ(n)) を表す、実装によって近似された Number 値を返す。

21.3.2.22 Math.log1p ( x )

この関数は 1 + x の自然対数を返す。結果は、x の値が 0 に近い場合でも正確になるような方法で計算される。

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN、+0𝔽、-0𝔽、または +∞𝔽 のいずれかである場合、n を返す。
  3. n が -1𝔽 である場合、-∞𝔽 を返す。
  4. n < -1𝔽 である場合、NaN を返す。
  5. ln(1 + ℝ(n)) を表す、実装によって近似された Number 値を返す。

21.3.2.23 Math.log10 ( x )

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

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN または +∞𝔽 のいずれかである場合、n を返す。
  3. n が 1𝔽 である場合、+0𝔽 を返す。
  4. n が +0𝔽 または -0𝔽 のいずれかである場合、-∞𝔽 を返す。
  5. n < -0𝔽 である場合、NaN を返す。
  6. log10(ℝ(n)) を表す、実装によって近似された Number 値を返す。

21.3.2.24 Math.log2 ( x )

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

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN または +∞𝔽 のいずれかである場合、n を返す。
  3. n が 1𝔽 である場合、+0𝔽 を返す。
  4. n が +0𝔽 または -0𝔽 のいずれかである場合、-∞𝔽 を返す。
  5. n < -0𝔽 である場合、NaN を返す。
  6. log2(ℝ(n)) を表す、実装によって近似された Number 値を返す。

21.3.2.25 Math.max ( ...args )

0 個以上の引数を与えると、この関数は各引数に対して ToNumber を呼び出し、その結果の値のうち最大のものを返す。

呼び出されたとき、次の手順を実行する。

  1. coerced を新しい空の List とする。
  2. args の各要素 arg について、
    1. n を ? ToNumber(arg) とする。
    2. n を coerced に追加する。
  3. highest を -∞𝔽 とする。
  4. coerced の各要素 number について、
    1. number が NaN である場合、NaN を返す。
    2. number が +0𝔽 であり、highest が -0𝔽 である場合、highest を +0𝔽 に設定する。
    3. number > highest である場合、highest を number に設定する。
  5. highest を返す。
注

最大値を決定するための値の比較は、+0𝔽 が -0𝔽 より大きいとみなされることを除き、IsLessThan アルゴリズムを使用して行われる。

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

21.3.2.26 Math.min ( ...args )

0 個以上の引数を与えると、この関数は各引数に対して ToNumber を呼び出し、その結果の値のうち最小のものを返す。

呼び出されたとき、次の手順を実行する。

  1. coerced を新しい空の List とする。
  2. args の各要素 arg について、
    1. n を ? ToNumber(arg) とする。
    2. n を coerced に追加する。
  3. lowest を +∞𝔽 とする。
  4. coerced の各要素 number について、
    1. number が NaN である場合、NaN を返す。
    2. number が -0𝔽 であり、lowest が +0𝔽 である場合、lowest を -0𝔽 に設定する。
    3. number < lowest である場合、lowest を number に設定する。
  5. lowest を返す。
注

最小値を決定するための値の比較は、+0𝔽 が -0𝔽 より大きいとみなされることを除き、IsLessThan アルゴリズムを使用して行われる。

この関数の "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 値を返す。この値は、実装定義のアルゴリズムまたは方式を使用し、その範囲にわたってほぼ一様な分布となるようにランダムまたは擬似ランダムに選択される。

異なる realm のために作成された各 Math.random 関数は、連続する呼び出しから異なる値のシーケンスを生成しなければならない。

21.3.2.29 Math.round ( x )

この関数は、x に最も近い整数 Number 値を返す。2 つの整数 Number が x に等しく近い場合、結果は +∞ に近い方の Number 値となる。x がすでに整数である場合、結果は x である。

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が有限 Number でないか、または n が整数 Number である場合、n を返す。
  3. n < 0.5𝔽 かつ n > +0𝔽 である場合、+0𝔽 を返す。
  4. n < -0𝔽 かつ n ≥ -0.5𝔽 である場合、-0𝔽 を返す。
  5. n に最も近い整数 Number を返し、同距離の場合は +∞ に近い Number を優先する。
注 1

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

注 2

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

21.3.2.30 Math.sign ( x )

この関数は x の符号を返し、x が正、負、またはゼロのいずれであるかを示す。

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN、+0𝔽、または -0𝔽 のいずれかである場合、n を返す。
  3. n < -0𝔽 である場合、-1𝔽 を返す。
  4. 1𝔽 を返す。

21.3.2.31 Math.sin ( x )

この関数は x の正弦を返す。引数はラジアンで表される。

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN、+0𝔽、または -0𝔽 のいずれかである場合、n を返す。
  3. n が +∞𝔽 または -∞𝔽 のいずれかである場合、NaN を返す。
  4. ℝ(n) の正弦を表す、実装によって近似された Number 値を返す。

21.3.2.32 Math.sinh ( x )

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

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が有限 Number でないか、または n が +0𝔽 または -0𝔽 のいずれかである場合、n を返す。
  3. ℝ(n) の双曲線正弦を表す、実装によって近似された Number 値を返す。
注

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

21.3.2.33 Math.sqrt ( x )

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

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN、+0𝔽、-0𝔽、または +∞𝔽 のいずれかである場合、n を返す。
  3. n < -0𝔽 である場合、NaN を返す。
  4. 𝔽(ℝ(n) の平方根) を返す。

21.3.2.34 Math.sumPrecise ( items )

Numbers の iterable を与えると、この関数は iterable 内の各値を合計し、その総和を返す。いずれかの値が Number でない場合、TypeError 例外を投げる。

呼び出されたとき、次の手順を実行する。

  1. ? RequireObjectCoercible(items) を実行する。
  2. iteratorRecord を ? GetIterator(items, sync) とする。
  3. state を minus-zero とする。
  4. sum を 0 とする。
  5. count を 0 とする。
  6. next を not-started とする。
  7. next が done でない間、繰り返す。
    1. next を ? IteratorStepValue(iteratorRecord) に設定する。
    2. next が done でない場合、
      1. count ≥ 253 - 1 である場合、
        1. 注記: この手順は実際には到達しないことが想定されており、実装がこの仕様に違反することなく入力が「妥当な大きさ」であることに依存できるようにするためだけに含まれている。
        2. error を ThrowCompletion(新たに作成された RangeError オブジェクト) とする。
        3. ? IteratorClose(iteratorRecord, error) を返す。
      2. next が Number でない場合、
        1. error を ThrowCompletion(新たに作成された TypeError オブジェクト) とする。
        2. ? IteratorClose(iteratorRecord, error) を返す。
      3. n を next とする。
      4. state が not-a-number でない場合、
        1. n が NaN である場合、
          1. state を not-a-number に設定する。
        2. それ以外で n が +∞𝔽 である場合、
          1. state が minus-infinity である場合、state を not-a-number に設定する。
          2. それ以外の場合、state を plus-infinity に設定する。
        3. それ以外で n が -∞𝔽 である場合、
          1. state が plus-infinity である場合、state を not-a-number に設定する。
          2. それ以外の場合、state を minus-infinity に設定する。
        4. それ以外で n が -0𝔽 でなく、state が minus-zero または finite のいずれかである場合、
          1. state を finite に設定する。
          2. sum を sum + ℝ(n) に設定する。
      5. count を count + 1 に設定する。
  8. state が not-a-number である場合、NaN を返す。
  9. state が plus-infinity である場合、+∞𝔽 を返す。
  10. state が minus-infinity である場合、-∞𝔽 を返す。
  11. state が minus-zero である場合、-0𝔽 を返す。
  12. 𝔽(sum) を返す。
注

sum の値は、さまざまなアルゴリズムによって任意精度算術を使用せずに計算できる。その一つが、Jonathan Richard Shewchuk による 適応精度浮動小数点算術と高速で堅牢な幾何学的述語 で示されている「Grow-Expansion」アルゴリズムである。より新しいアルゴリズムは「小型および大型スーパーアキュムレータを使用した高速な正確総和」で示されており、そのコードは https://gitlab.com/radfordneal/xsum で入手できる。

21.3.2.35 Math.tan ( x )

この関数は x の正接を返す。引数はラジアンで表される。

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN、+0𝔽、または -0𝔽 のいずれかである場合、n を返す。
  3. n が +∞𝔽 または -∞𝔽 のいずれかである場合、NaN を返す。
  4. ℝ(n) の正接を表す、実装によって近似された Number 値を返す。

21.3.2.36 Math.tanh ( x )

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

呼び出されたとき、次の手順を実行する。

  1. n を ? ToNumber(x) とする。
  2. n が NaN、+0𝔽、または -0𝔽 のいずれかである場合、n を返す。
  3. n が +∞𝔽 である場合、1𝔽 を返す。
  4. n が -∞𝔽 である場合、-1𝔽 を返す。
  5. ℝ(n) の双曲線正接を表す、実装によって近似された Number 値を返す。
注

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 が有限 Number でないか、または 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 における時間の測定に類似しており、特に先発グレゴリオ暦、1970年1月1日 UTC の開始時の真夜中をエポックとする定義、および各日を正確に 86,400 秒(各秒は 1000 ミリ秒)から構成されるものとして扱う点を共有しています。

ECMAScript の時刻値は Number であり、ミリ秒精度で時点を表す整数 Number(有限時刻値と呼ばれる)、または特定の時点を表さない NaN のいずれかである。MillisecondsPerDay の整数倍(すなわち、ある整数 d に対する MillisecondsPerDay × d)である有限時刻値は、エポックから d 日の完全な UTC 日数だけ後(d が負の場合はエポックより前)の UTC 日の開始時点を表す。その他の各有限時刻値 tv は、そのような倍数である直前の最大の有限時刻値 s を基準として定義され、s と同じ UTC 日内にありながら、それより (tv - s) ミリ秒後に発生する時点を表す。

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

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

1970年1月1日 UTC の開始時の真夜中の正確な瞬間は、時間値 +0𝔽 で表されます。

注

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

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

21.4.1.2 時間関連の定数

これらの定数は、以下の節のアルゴリズムから参照されます。

HoursPerDay = 24
MinutesPerHour = 60
SecondsPerMinute = 60
MillisecondsPerSecond = 1000
MillisecondsPerMinute = 60000 = MillisecondsPerSecond × SecondsPerMinute
MillisecondsPerHour = 3600000 = MillisecondsPerMinute × MinutesPerHour
MillisecondsPerDay = 86400000 = MillisecondsPerHour × HoursPerDay
NanosecondsPerDay = 106 × MillisecondsPerDay = 8.64 × 1013
NanosecondsPerSecond = 106 × MillisecondsPerSecond = 109
NanosecondsPerMillisecond = 106
NanosecondsPerMicrosecond = 103
MaxEpochNanoseconds = 108 × NanosecondsPerDay = 8.64 × 1021
MinEpochNanoseconds = -MaxEpochNanoseconds = -8.64 × 1021

21.4.1.3 Day ( tv )

抽象操作 Day。引数 tv (a finite time value)。戻り値:整数。 tv が属する日の日番号を返します。 呼び出されると、次の手順を実行する。

  1. floor(ℝ(tv) / MillisecondsPerDay) を返す。

21.4.1.4 TimeWithinDay ( tv )

抽象操作 TimeWithinDay。引数 tv (a finite time value)。戻り値:an integer in the interval from 0 (inclusive) to MillisecondsPerDay (exclusive)。 tv が属する日の開始からのミリ秒数を返します。 呼び出されると、次の手順を実行する。

  1. ℝ(tv) modulo MillisecondsPerDay を返す。

21.4.1.5 DayFromYear ( y )

抽象操作 DayFromYear。引数 y (整数)。戻り値:整数。 年 y の最初の日の日番号を返します。 呼び出されると、次の手順を実行する。

  1. 注記: 次の手順で、numberYears1、numberYears4、numberYears100、および numberYears400 は、それぞれエポックから年 y の開始までに現れる、1、4、100、および400で割り切れる年の数を表す。y がエポックより前である場合、その数は負である。
  2. numberYears1 を (y - 1970) とする。
  3. numberYears4 を floor((y - 1969) / 4) とする。
  4. numberYears100 を floor((y - 1901) / 100) とする。
  5. numberYears400 を floor((y - 1601) / 400) とする。
  6. 365 × numberYears1 + numberYears4 - numberYears100 + numberYears400 を返す。

21.4.1.6 TimeFromYear ( y )

抽象操作 TimeFromYear。引数 y (整数)。戻り値:a time value。 年 y の開始の時間値を返します。 呼び出されると、次の手順を実行する。

  1. 𝔽(MillisecondsPerDay × DayFromYear(y)) を返す。

21.4.1.7 YearFromTime ( tv )

抽象操作 YearFromTime。引数 tv (a finite time value)。戻り値:整数。 tv が属する年を返します。 呼び出されると、次の手順を実行する。

  1. TimeFromYear(y) ≤ tv を満たす最大の整数 y(+∞ に最も近いもの)を返す。

21.4.1.8 DayWithinYear ( tv )

抽象操作 DayWithinYear。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 365。 呼び出されると、次の手順を実行する。

  1. Day(tv) - DayFromYear(YearFromTime(tv)) を返す。

21.4.1.9 InLeapYear ( tv )

抽象操作 InLeapYear。引数 tv (a finite time value)。戻り値:(0 または 1)。 tv がうるう年内にある場合は 1 を、それ以外の場合は 0 を返します。 呼び出されると、次の手順を実行する。

  1. y を YearFromTime(tv) とする。
  2. (y modulo 400) = 0 である場合、1 を返す。
  3. (y modulo 100) = 0 である場合、0 を返す。
  4. (y modulo 4) = 0 である場合、1 を返す。
  5. 0 を返す。

21.4.1.10 MonthFromTime ( tv )

抽象操作 MonthFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 11。 tv が属する月を識別する整数を返します。月の値 0 は1月、1 は2月、2 は3月、3 は4月、4 は5月、5 は6月、6 は7月、7 は8月、8 は9月、9 は10月、10 は11月、11 は12月を指定します。MonthFromTime(+0𝔽) = 0 であり、1970年1月1日木曜日に対応することに注意してください。 呼び出されると、次の手順を実行する。

  1. inLeapYear を InLeapYear(tv) とする。
  2. dayWithinYear を DayWithinYear(tv) とする。
  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.11 DateFromTime ( tv )

抽象操作 DateFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 1 to 31。 tv が属する月の日を返します。 呼び出されると、次の手順を実行する。

  1. inLeapYear を InLeapYear(tv) とする。
  2. dayWithinYear を DayWithinYear(tv) とする。
  3. month を MonthFromTime(tv) とする。
  4. month = 0 である場合、dayWithinYear + 1 を返す。
  5. month = 1 である場合、dayWithinYear - 30 を返す。
  6. month = 2 である場合、dayWithinYear - 58 - inLeapYear を返す。
  7. month = 3 である場合、dayWithinYear - 89 - inLeapYear を返す。
  8. month = 4 である場合、dayWithinYear - 119 - inLeapYear を返す。
  9. month = 5 である場合、dayWithinYear - 150 - inLeapYear を返す。
  10. month = 6 である場合、dayWithinYear - 180 - inLeapYear を返す。
  11. month = 7 である場合、dayWithinYear - 211 - inLeapYear を返す。
  12. month = 8 である場合、dayWithinYear - 242 - inLeapYear を返す。
  13. month = 9 である場合、dayWithinYear - 272 - inLeapYear を返す。
  14. month = 10 である場合、dayWithinYear - 303 - inLeapYear を返す。
  15. 表明: month = 11。
  16. dayWithinYear - 333 - inLeapYear を返す。

21.4.1.12 WeekDay ( tv )

抽象操作 WeekDay。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 6。 tv が属する曜日を識別する整数を返します。曜日値 0 は日曜日、1 は月曜日、2 は火曜日、3 は水曜日、4 は木曜日、5 は金曜日、6 は土曜日を指定します。WeekDay(+0𝔽) = 4 であり、1970年1月1日木曜日に対応することに注意してください。 呼び出されると、次の手順を実行する。

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

21.4.1.13 HourFromTime ( tv )

抽象操作 HourFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 23。 tv が属する日の時を返します。 呼び出されると、次の手順を実行する。

  1. floor(ℝ(tv) / MillisecondsPerHour) modulo HoursPerDay を返す。

21.4.1.14 MinuteFromTime ( tv )

抽象操作 MinuteFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 59。 tv が属する時の分を返します。 呼び出されると、次の手順を実行する。

  1. floor(ℝ(tv) / MillisecondsPerMinute) modulo MinutesPerHour を返す。

21.4.1.15 SecondFromTime ( tv )

抽象操作 SecondFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 59。 tv が属する分の秒を返します。 呼び出されると、次の手順を実行する。

  1. floor(ℝ(tv) / MillisecondsPerSecond) modulo SecondsPerMinute を返す。

21.4.1.16 MillisecondFromTime ( tv )

抽象操作 MillisecondFromTime。引数 tv (a finite time value)。戻り値:an integer in the inclusive interval from 0 to 999。 tv が属する秒のミリ秒を返します。 呼び出されると、次の手順を実行する。

  1. ℝ(tv) modulo MillisecondsPerSecond を返す。

21.4.1.17 エポックナノ秒と範囲

エポックナノ秒カウントは、ナノ秒精度で時点を表す整数です。時間値と同じ範囲をナノ秒で表したもの、すなわち MinEpochNanoseconds から MaxEpochNanoseconds までをサポートします。時間値 NaN に相当するナノ秒値は存在せず、特定の時点がないことを表す表現はありません。

1970年1月1日 UTC の開始時の真夜中の正確な瞬間は値 0 で表されます。最大値は MaxEpochNanoseconds、最小値は MinEpochNanoseconds です。

21.4.1.18 GetUTCEpochNanoseconds ( year, month, day, hour, minute, second, millisecond, microsecond, nanosecond )

抽象操作 GetUTCEpochNanoseconds。引数 year (整数)、month (an integer in the inclusive interval from 1 to 12)、day (an integer in the inclusive interval from 1 to 31)、hour (an integer in the inclusive interval from 0 to 23)、minute (an integer in the inclusive interval from 0 to 59)、second (an integer in the inclusive interval from 0 to 59)、millisecond (an integer in the inclusive interval from 0 to 999)、microsecond (an integer in the inclusive interval from 0 to 999) および nanosecond (an integer in the inclusive interval from 0 to 999)。戻り値:an epoch nanoseconds count。 返される値は、UTC における指定された ISO 8601 暦日付および壁時計時刻に対応するエポックナノ秒カウントです。 呼び出されると、次の手順を実行する。

  1. date を MakeDay(𝔽(year), 𝔽(month - 1), 𝔽(day)) とする。
  2. time を MakeTime(𝔽(hour), 𝔽(minute), 𝔽(second), 𝔽(millisecond)) とする。
  3. epochMilliseconds を MakeDate(date, time) とする。
  4. 表明: epochMilliseconds は整数 Number である。
  5. ℝ(epochMilliseconds) × NanosecondsPerMillisecond + microsecond × NanosecondsPerMicrosecond + nanosecond を返す。

21.4.1.19 タイムゾーン識別子

ECMAScript のタイムゾーンはタイムゾーン識別子によって表されます。これは、0x0000 から 0x007F までの閉区間内のコード単位だけで構成される String です。 ECMAScript 実装がサポートするタイムゾーンは、AvailableNamedTimeZoneIdentifiers によって返される Time Zone Identifier Record の [[Identifier]] フィールドで表される利用可能な名前付きタイムゾーン、または IsTimeZoneOffsetString が true を返す String で表されるオフセットタイムゾーンである場合があります。

プライマリタイムゾーン識別子は、利用可能な名前付きタイムゾーンの優先識別子です。 非プライマリタイムゾーン識別子は、プライマリタイムゾーン識別子ではない、利用可能な名前付きタイムゾーンの識別子です。 利用可能な名前付きタイムゾーン識別子は、プライマリタイムゾーン識別子または非プライマリタイムゾーン識別子のいずれかです。 各利用可能な名前付きタイムゾーン識別子は、正確に1つの利用可能な名前付きタイムゾーンに関連付けられます。 各利用可能な名前付きタイムゾーンは、正確に1つのプライマリタイムゾーン識別子と、0個以上の非プライマリタイムゾーン識別子に関連付けられます。

ECMAScript 実装は、識別子 "UTC" を持つ利用可能な名前付きタイムゾーンをサポートしなければならず、これは UTC タイムゾーンのプライマリタイムゾーン識別子でなければなりません。 さらに、実装は任意の数のその他の利用可能な名前付きタイムゾーンをサポートしてもかまいません。

ECMA-402 Internationalization API 仕様で説明されるタイムゾーンの要件に従う実装は、タイムゾーン対応と呼ばれます。 タイムゾーン対応実装は、IANA Time Zone Database の「Zone」および「Link」名に対応する利用可能な名前付きタイムゾーンをサポートしなければならず、そのような名前だけをサポートしなければなりません。 タイムゾーン対応実装では、ECMA-402 で規定される AvailableNamedTimeZoneIdentifiers によって明示的に上書きされる場合を除き、プライマリタイムゾーン識別子は IANA Time Zone Database の「Zone」名であり、非プライマリタイムゾーン識別子はそれぞれ「Link」名です。 IANA Time Zone Database 全体をサポートしない実装にも、タイムゾーンを表す識別子として IANA Time Zone Database の名前を使用することが推奨されます。

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

実装定義の抽象操作 GetNamedTimeZoneEpochNanoseconds。引数 timeZoneIdentifier (String)、year (整数)、month (an integer in the inclusive interval from 1 to 12)、day (an integer in the inclusive interval from 1 to 31)、hour (an integer in the inclusive interval from 0 to 23)、minute (an integer in the inclusive interval from 0 to 59)、second (an integer in the inclusive interval from 0 to 59)、millisecond (an integer in the inclusive interval from 0 to 999)、microsecond (an integer in the inclusive interval from 0 to 999) および nanosecond (an integer in the inclusive interval from 0 to 999)。戻り値:リスト (要素:epoch nanoseconds counts)。 返される List 内の各値は、timeZoneIdentifier で識別される名前付きタイムゾーンにおける、指定された ISO 8601 暦日付および壁時計時刻に対応するエポックナノ秒カウントを表します。

入力が負のタイムゾーン遷移(たとえば、夏時間が終了する場合や、タイムゾーン規則の変更によってタイムゾーンオフセットが減少する場合)のため複数回発生するローカル時刻を表す場合、返される List は複数の要素を持ち、数値の昇順で並べ替えられます。 入力が正のタイムゾーン遷移(たとえば、夏時間が開始する場合や、タイムゾーン規則の変更によってタイムゾーンオフセットが増加する場合)のため飛ばされるローカル時刻を表す場合、返される List は空です。 それ以外の場合、返される List は1つの要素を持ちます。

いかなるタイムゾーンについてもローカルな政治的規則を含まない ECMAScript 実装で使用される、GetNamedTimeZoneEpochNanoseconds の既定の実装は、呼び出されたときに次の手順を実行します。

  1. 表明: timeZoneIdentifier は "UTC" である。
  2. epochNanoseconds を GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) とする。
  3. « epochNanoseconds » を返す。
注

タイムゾーン対応実装には、IANA Time Zone Database のタイムゾーン情報を使用することが要求されます(その他のすべての実装にも推奨されます)。

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

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

21.4.1.21 GetNamedTimeZoneOffsetNanoseconds ( timeZoneIdentifier, epochNanoseconds )

実装定義の抽象操作 GetNamedTimeZoneOffsetNanoseconds。引数 timeZoneIdentifier (String) および epochNanoseconds (an epoch nanoseconds count)。戻り値:整数。

返される整数は、エポックナノ秒カウント epochNanoseconds に対応する時点における、timeZoneIdentifier で識別される名前付きタイムゾーンの UTC からのオフセットをナノ秒単位で表します。

いかなるタイムゾーンについてもローカルな政治的規則を含まない ECMAScript 実装で使用される、GetNamedTimeZoneOffsetNanoseconds の既定の実装は、呼び出されたときに次の手順を実行します。

  1. 表明: timeZoneIdentifier は "UTC" である。
  2. 0 を返す。
注

タイムゾーンオフセット値は正または負である場合があります。

21.4.1.22 Time Zone Identifier Record

Time Zone Identifier Record は、利用可能な名前付きタイムゾーン識別子と、それに対応するプライマリタイムゾーン識別子を説明するために使用される Record です。

Time Zone Identifier Record は 表 60 に列挙されるフィールドを持ちます。

表 60: Time Zone Identifier Record のフィールド
フィールド名 値 意味
[[Identifier]] a String 実装がサポートする、利用可能な名前付きタイムゾーン識別子。
[[PrimaryIdentifier]] a String [[Identifier]] が解決されるプライマリタイムゾーン識別子。
注

[[Identifier]] がプライマリタイムゾーン識別子である場合、[[Identifier]] は [[PrimaryIdentifier]] です。

21.4.1.23 AvailableNamedTimeZoneIdentifiers ( )

実装定義の抽象操作 AvailableNamedTimeZoneIdentifiers。引数なし。戻り値:リスト (要素:Time Zone Identifierレコード)。 その結果は、この実装で利用可能なすべての名前付きタイムゾーン識別子と、それぞれの利用可能な名前付きタイムゾーン識別子に対応するプライマリタイムゾーン識別子を説明します。 List は、各 Time Zone Identifier Record の [[Identifier]] フィールドに従って順序付けられます。

ECMA-402 Internationalization API を実装するすべての実装を含むタイムゾーン対応実装は、ECMA-402 で規定されるとおりに AvailableNamedTimeZoneIdentifiers 抽象操作を実装しなければなりません。 それ以外の場合、AvailableNamedTimeZoneIdentifiers は呼び出されたときに次の手順を実行します。

  1. 実装がいかなるタイムゾーンについてもローカルな政治的規則を含まない場合、
    1. « Time Zone Identifier Record { [[Identifier]]: "UTC", [[PrimaryIdentifier]]: "UTC" } » を返す。
  2. identifiers を、一意な利用可能な名前付きタイムゾーン識別子を辞書式コード単位順で並べ替えた List とする。
  3. result を新しい空の List とする。
  4. identifiers の各要素 identifier について、次を行う。
    1. primary を identifier とする。
    2. identifier がこの実装における非プライマリタイムゾーン識別子であり、identifier が "UTC" でない場合、
      1. primary を identifier に関連付けられたプライマリタイムゾーン識別子に設定する。
      2. 注記: 実装は、プライマリタイムゾーン識別子を取得するために identifier を反復的に解決する必要がある場合がある。
    3. record を Time Zone Identifier Record { [[Identifier]]: identifier, [[PrimaryIdentifier]]: primary } とする。
    4. record を result に追加する。
  5. 表明: result は、record.[[Identifier]] が "UTC" であり、record.[[PrimaryIdentifier]] が "UTC" である Time Zone Identifier Record record を含む。
  6. result を返す。

21.4.1.24 SystemTimeZoneIdentifier ( )

実装定義の抽象操作 SystemTimeZoneIdentifier。引数なし。戻り値:String。 ホスト環境の現在のタイムゾーンを表す String を返します。これは、IsTimeZoneOffsetString が true を返す UTC オフセットを表す String、またはプライマリタイムゾーン識別子のいずれかです。 呼び出されると、次の手順を実行する。

  1. 実装が UTC タイムゾーンだけをサポートする場合、"UTC" を返す。
  2. systemTimeZoneString を、ホスト環境の現在のタイムゾーンを表す String、すなわちプライマリタイムゾーン識別子またはオフセットタイムゾーン識別子のいずれかとする。
  3. systemTimeZoneString を返す。
注

Date オブジェクトのメソッドで実装が一般に提供する機能水準を保証するため、そのようなものが存在する場合、SystemTimeZoneIdentifier はホスト環境のタイムゾーン設定に対応する IANA タイムゾーン名を返すことが推奨されます。 GetNamedTimeZoneEpochNanoseconds および GetNamedTimeZoneOffsetNanoseconds は、そのような規則が存在する場合、そのタイムゾーンにおける標準時および夏時間のローカルな政治的規則を反映しなければなりません。

たとえば、ホスト環境が、ユーザーがタイムゾーンとして米国東部時間を選択したシステム上のブラウザーである場合、SystemTimeZoneIdentifier は "America/New_York" を返します。

21.4.1.25 LocalTime ( tv )

抽象操作 LocalTime。引数 tv (a finite time value)。戻り値:整数の Number。 tv を UTC からローカル時刻へ変換します。 tv において有効な標準時および夏時間に関するローカルな政治的規則を使用して、この節で規定される方法で結果を決定するべきです。 呼び出されると、次の手順を実行する。

  1. systemTimeZoneIdentifier を SystemTimeZoneIdentifier() とする。
  2. IsTimeZoneOffsetString(systemTimeZoneIdentifier) が true である場合、
    1. offsetNanoseconds を ParseTimeZoneOffsetString(systemTimeZoneIdentifier) とする。
  3. そうでない場合、
    1. offsetNanoseconds を GetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, ℝ(tv) × NanosecondsPerMillisecond) とする。
  4. offsetMilliseconds を truncate(offsetNanoseconds / NanosecondsPerMillisecond) とする。
  5. tv + 𝔽(offsetMilliseconds) を返す。
注 1

ローカル時刻 tv に対する政治的規則が実装内で利用できない場合、SystemTimeZoneIdentifier は "UTC" を返し、GetNamedTimeZoneOffsetNanoseconds は 0 を返すため、結果は tv です。

注 2

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

注 3

時刻が繰り返される負のタイムゾーン遷移(たとえば、夏時間が終了する場合や、タイムゾーン調整が減少する場合)では、2つの異なる入力時間値 tvUTC が同じローカル時刻 tlocal に変換されます。

LocalTime(UTC(tvlocal)) は必ずしも常に tvlocal と等しいとは限りません。同様に、UTC(LocalTime(tvUTC)) も必ずしも常に tvUTC と等しいとは限りません。

21.4.1.26 UTC ( t )

抽象操作 UTC。引数 t (Number)。戻り値:a time value。 t をローカル時刻から UTC 時間値へ変換します。 t において有効な標準時および夏時間に関するローカルな政治的規則を使用して、この節で規定される方法で結果を決定するべきです。 呼び出されると、次の手順を実行する。

  1. t が有限 Number でない場合、NaN を返す。
  2. systemTimeZoneIdentifier を SystemTimeZoneIdentifier() とする。
  3. IsTimeZoneOffsetString(systemTimeZoneIdentifier) が true である場合、
    1. offsetNanoseconds を ParseTimeZoneOffsetString(systemTimeZoneIdentifier) とする。
  4. そうでない場合、
    1. possibleInstants を GetNamedTimeZoneEpochNanoseconds(systemTimeZoneIdentifier, YearFromTime(t), MonthFromTime(t) + 1, DateFromTime(t), HourFromTime(t), MinuteFromTime(t), SecondFromTime(t), MillisecondFromTime(t), 0, 0) とする。
    2. 注記: 次の手順は、t が負のタイムゾーン遷移(たとえば、夏時間が終了する場合や、タイムゾーン規則の変更によってタイムゾーンオフセットが減少する場合)で複数回繰り返されるローカル時刻、または正のタイムゾーン遷移(たとえば、夏時間が開始する場合や、タイムゾーン規則の変更によってタイムゾーンオフセットが増加する場合)で飛ばされるローカル時刻を表す場合に、遷移前のタイムゾーンオフセットを使用して t が解釈されることを保証する。
    3. possibleInstants が空でない場合、
      1. disambiguatedInstant を possibleInstants[0] とする。
    4. そうでない場合、
      1. 注記: t は正のタイムゾーン遷移(たとえば、夏時間の開始または UTC オフセットを増加させるタイムゾーン規則の変更による)で飛ばされたローカル時刻を表す。
      2. possibleInstantsBefore を GetNamedTimeZoneEpochNanoseconds(systemTimeZoneIdentifier, YearFromTime(tBefore), MonthFromTime(tBefore) + 1, DateFromTime(tBefore), HourFromTime(tBefore), MinuteFromTime(tBefore), SecondFromTime(tBefore), MillisecondFromTime(tBefore), 0, 0) とする。ここで tBefore は possibleInstantsBefore が空でない最大の整数 Number < t である(すなわち、tBefore は遷移前の最後のローカル時刻を表す)。
      3. disambiguatedInstant を possibleInstantsBefore の最後の要素とする。
    5. offsetNanoseconds を GetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, disambiguatedInstant) とする。
  5. offsetMilliseconds を truncate(offsetNanoseconds / NanosecondsPerMillisecond) とする。
  6. t - 𝔽(offsetMilliseconds) を返す。

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

ローカル時刻 t に対する政治的規則が実装内で利用できない場合、SystemTimeZoneIdentifier は "UTC" を返し、GetNamedTimeZoneOffsetNanoseconds は 0 を返すため、結果は t です。

注 1

タイムゾーン対応実装には、IANA Time Zone Database のタイムゾーン情報を使用することが要求されます(その他のすべての実装にも推奨されます)。

America/New_York における2017年11月5日午前1時30分は2回繰り返されます(時計が戻る)が、午前1時30分 UTC-05 ではなく、午前1時30分 UTC-04 として解釈されなければなりません。 UTC(TimeClip(MakeDate(MakeDay(2017, 10, 5), MakeTime(1, 30, 0, 0)))) において、offsetMilliseconds の値は -4 × MillisecondsPerHour です。

America/New_York における2017年3月12日午前2時30分は存在しませんが、午前2時30分 UTC-05(午前3時30分 UTC-04 と同等)として解釈されなければなりません。 UTC(TimeClip(MakeDate(MakeDay(2017, 2, 12), MakeTime(2, 30, 0, 0)))) において、offsetMilliseconds の値は -5 × MillisecondsPerHour です。

注 2

UTC(LocalTime(tUTC)) は必ずしも常に tUTC と等しいとは限りません。同様に、LocalTime(UTC(tlocal)) も必ずしも常に tlocal と等しいとは限りません。

21.4.1.27 MakeTime ( hour, minute, second, millisecond )

抽象操作 MakeTime。引数 hour (Number)、minute (Number)、second (Number) および millisecond (Number)。戻り値:Number。 ミリ秒数を計算します。 呼び出されると、次の手順を実行する。

  1. hour が有限 Number でない、minute が有限 Number でない、second が有限 Number でない、または millisecond が有限 Number でない場合、NaN を返す。
  2. hourMV を ! ToIntegerOrInfinity(hour) とする。
  3. minuteMV を ! ToIntegerOrInfinity(minute) とする。
  4. secondMV を ! ToIntegerOrInfinity(second) とする。
  5. millisecondMV を ! ToIntegerOrInfinity(millisecond) とする。
  6. ((𝔽(hourMV) × 𝔽(MillisecondsPerHour) + 𝔽(minuteMV) × 𝔽(MillisecondsPerMinute)) + 𝔽(secondMV) × 𝔽(MillisecondsPerSecond)) + 𝔽(millisecondMV) を返す。
注

MakeTime 内の算術は浮動小数点算術であり、結合則が成り立たないため、演算は正しい順序で実行しなければなりません。

21.4.1.28 MakeDay ( year, month, day )

抽象操作 MakeDay。引数 year (Number)、month (Number) および day (Number)。戻り値:(a finite Number または NaN)。 日数を計算します。 呼び出されると、次の手順を実行する。

  1. year が有限 Number でない、month が有限 Number でない、または day が有限 Number でない場合、NaN を返す。
  2. yearMV を ! ToIntegerOrInfinity(year) とする。
  3. monthMV を ! ToIntegerOrInfinity(month) とする。
  4. dayMV を ! ToIntegerOrInfinity(day) とする。
  5. balancedYear を 𝔽(yearMV) + 𝔽(floor(monthMV / 12)) とする。
  6. balancedYear が有限 Number でない場合、NaN を返す。
  7. balancedMonthMV を monthMV modulo 12 とする。
  8. YearFromTime(tv) = ℝ(balancedYear)、MonthFromTime(tv) = balancedMonthMV、かつ DateFromTime(tv) = 1 を満たす有限の時刻値 tv を見つける。ただし、これが不可能な場合(いずれかの引数が範囲外であるため)、NaN を返す。
  9. 𝔽(Day(tv)) + 𝔽(dayMV) - 1𝔽 を返す。

21.4.1.29 MakeDate ( day, time )

抽象操作 MakeDate。引数 day (Number) および time (Number)。戻り値:(a finite Number または NaN)。 ミリ秒数を計算します。 呼び出されると、次の手順を実行する。

  1. day が有限 Number でない、または time が有限 Number でない場合、NaN を返す。
  2. tv を day × 𝔽(MillisecondsPerDay) + time とする。
  3. tv が有限 Number でない場合、NaN を返す。
  4. tv を返す。

21.4.1.30 MakeFullYear ( year )

抽象操作 MakeFullYear。引数 year (Number)。戻り値:(整数の Number または NaN)。 year の整数部分に関連付けられた完全な年を返し、0 から 99 までの閉区間内の任意の値を 1900 年の開始からの年数として解釈します。先発グレゴリオ暦との整合のため、「完全な年」は年 0(紀元前1年)の開始からの完了した年数を符号付きで数えたものとして定義されます。 呼び出されると、次の手順を実行する。

  1. year が NaN、+∞𝔽、または -∞𝔽 のいずれかである場合、NaN を返す。
  2. truncated を ! ToIntegerOrInfinity(year) とする。
  3. truncated が 0 から 99 までの閉区間内にある場合、1900𝔽 + 𝔽(truncated) を返す。
  4. 𝔽(truncated) を返す。

21.4.1.31 TimeClip ( time )

抽象操作 TimeClip。引数 time (Number)。戻り値:a time value。 ミリ秒数を計算します。 呼び出されると、次の手順を実行する。

  1. time が有限 Number でない場合、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 オフセット表現が付加された「日付時刻」形式も含まれます。

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

範囲外または形式に適合しない要素を含む文字列は、この形式の有効なインスタンスではありません。

注 1

毎日は真夜中に始まり真夜中に終わるため、1つの日付に関連付けられる2つの真夜中を区別するために、00:00 と 24:00 の2つの表記を使用できます。これは、次の2つの表記がまったく同じ時点を指すことを意味します。1995-02-04T24:00 と 1995-02-05T00:00。

注 2

この形式は、RFC 9557 で定義されるタイムゾーン名による注釈をサポートせず、タイムゾーンオフセットの数値表現だけをサポートします。

21.4.1.32.1 拡張年

1970年1月1日から前後約273,790年にわたる時間値の全範囲(21.4.1.1)を網羅するには、0 より前または 9999 より後の年を表現する必要があります。ISO 8601 は年表現の拡張を許可していますが、情報交換を行う当事者間の相互合意がある場合に限られます。簡略化された ECMAScript 形式では、このような拡張年表現は6桁でなければならず、常に + または - の符号を接頭辞として付けます。年 0 は正とみなされ、+ 符号を接頭辞として付けなければなりません。年 0 を -000000 と表現することは無効です。時間値の範囲外の時点を表す拡張年を持つ 日付時刻文字列形式に一致する文字列は、Date.parse によって認識不能として扱われ、実装固有の動作またはヒューリスティックへフォールバックすることなく、その関数は NaN を返します。

注

拡張年を持つ日付時刻値の例:

-271821-04-20T00:00:00Z 紀元前271822年
-000001-01-01T00:00:00Z 紀元前2年
+000000-01-01T00:00:00Z 紀元前1年
+000001-01-01T00:00:00Z 西暦1年
+001970-01-01T00:00:00Z 西暦1970年
+002009-12-15T00:00:00Z 西暦2009年
+275760-09-13T00:00:00Z 西暦275760年

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

ECMAScript は ISO 8601 から派生した UTC オフセット用の文字列交換形式を定義します。 形式は次の文法によって説明されます。

構文

UTCOffset ::: ASCIISign Hour ASCIISign Hour HourSubcomponents[+Extended] ASCIISign Hour HourSubcomponents[~Extended] ASCIISign ::: one of + - Hour ::: 0 DecimalDigit 1 DecimalDigit 20 21 22 23 HourSubcomponents[Extended] ::: TimeSeparator[?Extended] MinuteSecond TimeSeparator[?Extended] MinuteSecond TimeSeparator[?Extended] MinuteSecond 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 )

抽象操作 IsTimeZoneOffsetString。引数 offsetString (String)。戻り値:Boolean。 戻り値は、offsetString が UTCOffset によって与えられる文法に適合するかどうかを示します。 呼び出されると、次の手順を実行する。

  1. parseResult を ParseText(offsetString, UTCOffset) とする。
  2. parseResult がエラーの List である場合、false を返す。
  3. true を返す。

21.4.1.33.2 ParseTimeZoneOffsetString ( offsetString )

抽象操作 ParseTimeZoneOffsetString。引数 offsetString (String)。戻り値:整数。 戻り値は String offsetString に対応する UTC オフセットをナノ秒数として表します。 呼び出されると、次の手順を実行する。

  1. parseResult を ParseText(offsetString, UTCOffset) とする。
  2. 表明: parseResult はエラーの List ではない。
  3. 表明: parseResult は ASCIISign Parse Node を含む。
  4. parsedSign を parseResult 内に含まれる ASCIISign Parse Node に一致したソーステキストとする。
  5. parsedSign が単一のコードポイント U+002D (HYPHEN-MINUS) である場合、
    1. sign を -1 とする。
  6. そうでない場合、
    1. sign を 1 とする。
  7. 注記: 以下の StringToNumber の適用では、構文解析された各値が十分短い10進数字の文字列であることが保証されているため、精度は失われない。
  8. 表明: parseResult は Hour Parse Node を含む。
  9. parsedHours を parseResult 内に含まれる Hour Parse Node に一致したソーステキストとする。
  10. hours を ℝ(StringToNumber(CodePointsToString(parsedHours))) とする。
  11. parseResult が MinuteSecond Parse Node を含まない場合、
    1. minutes を 0 とする。
  12. そうでない場合、
    1. parsedMinutes を parseResult 内に含まれる最初の MinuteSecond Parse Node に一致したソーステキストとする。
    2. minutes を ℝ(StringToNumber(CodePointsToString(parsedMinutes))) とする。
  13. parseResult が2つの MinuteSecond Parse Node を含まない場合、
    1. seconds を 0 とする。
  14. そうでない場合、
    1. parsedSeconds を parseResult 内に含まれる2番目の MinuteSecond Parse Node に一致したソーステキストとする。
    2. seconds を ℝ(StringToNumber(CodePointsToString(parsedSeconds))) とする。
  15. parseResult が TemporalDecimalFraction Parse Node を含まない場合、
    1. nanoseconds を 0 とする。
  16. そうでない場合、
    1. parsedFraction を parseResult 内に含まれる TemporalDecimalFraction Parse Node に一致したソーステキストとする。
    2. fraction を CodePointsToString(parsedFraction) と "000000000" の文字列連結とする。
    3. nanosecondsString を fraction の 1 から 10 までの部分文字列とする。
    4. nanoseconds を ℝ(StringToNumber(nanosecondsString)) とする。
  17. sign × (((hours × MinutesPerHour + minutes) × SecondsPerMinute + seconds) × NanosecondsPerSecond + nanoseconds) を返す。

21.4.2 Date コンストラクター

Date コンストラクターは:

  • %Date% です。
  • グローバルオブジェクトの "Date" プロパティの初期値です。
  • コンストラクターとして呼び出されたとき、新しい Date を作成して初期化します。
  • コンストラクターとしてではなく関数として呼び出されたとき、現在の時刻(UTC)を表す String を返します。
  • 引数の数および型に基づいて動作が異なる関数です。
  • クラス定義の extends 節の値として使用できます。規定された Date の動作を継承しようとするサブクラスコンストラクターは、[[DateValue]] 内部スロットを持つサブクラスインスタンスを作成して初期化するために、Date コンストラクターへの super 呼出しを含まなければなりません。

21.4.2.1 Date ( ...values )

この関数は呼び出されたとき、次の手順を実行します。

  1. NewTarget が undefined である場合、
    1. now を現在の時刻を識別する時間値(UTC)とする。
    2. ToDateString(now) を返す。
  2. numberOfArgs を values の要素数とする。
  3. numberOfArgs = 0 である場合、
    1. dv を現在の時刻を識別する時間値(UTC)とする。
  4. そうでなく、numberOfArgs = 1 である場合、
    1. value を values[0] とする。
    2. value が Object であり、value が [[DateValue]] 内部スロットを持つ場合、
      1. tv を value.[[DateValue]] とする。
    3. そうでない場合、
      1. primitive を ? ToPrimitive(value) とする。
      2. primitive が String である場合、
        1. 表明: primitive は String であるため、次の手順は中断完了を返さない。
        2. tv を、parse メソッド(21.4.3.2)の場合とまったく同じ方法で primitive を日付として構文解析した結果とする。
      3. そうでない場合、
        1. tv を ? ToNumber(primitive) とする。
    4. dv を TimeClip(tv) とする。
  5. そうでない場合、
    1. 表明: numberOfArgs ≥ 2。
    2. yearNumber を ? ToNumber(values[0]) とする。
    3. monthNumber を ? ToNumber(values[1]) とする。
    4. numberOfArgs > 2 である場合、dayNumber を ? ToNumber(values[2]) とする。そうでない場合、dayNumber を 1𝔽 とする。
    5. numberOfArgs > 3 である場合、hourNumber を ? ToNumber(values[3]) とする。そうでない場合、hourNumber を +0𝔽 とする。
    6. numberOfArgs > 4 である場合、minuteNumber を ? ToNumber(values[4]) とする。そうでない場合、minuteNumber を +0𝔽 とする。
    7. numberOfArgs > 5 である場合、secondNumber を ? ToNumber(values[5]) とする。そうでない場合、secondNumber を +0𝔽 とする。
    8. numberOfArgs > 6 である場合、millisecondNumber を ? ToNumber(values[6]) とする。そうでない場合、millisecondNumber を +0𝔽 とする。
    9. yearNumber を MakeFullYear(yearNumber) に設定する。
    10. finalDate を MakeDate(MakeDay(yearNumber, monthNumber, dayNumber), MakeTime(hourNumber, minuteNumber, secondNumber, millisecondNumber)) とする。
    11. dv を TimeClip(UTC(finalDate)) とする。
  6. obj を ? OrdinaryCreateFromConstructor(NewTarget, "%Date.prototype%", « [[DateValue]] ») とする。
  7. obj.[[DateValue]] を dv に設定する。
  8. obj を返す。

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

Date コンストラクターは:

  • 値が %Function.prototype% である [[Prototype]] 内部スロットを持ちます。
  • 値が 7𝔽 である "length" プロパティを持ちます。
  • 次のプロパティを持ちます。

21.4.3.1 Date.now ( )

この関数は、呼び出された時点の UTC 日付および時刻を示す時間値を返します。

21.4.3.2 Date.parse ( string )

この関数は引数に ToString 演算子を適用します。ToString が中断完了となった場合、その Completion Record が直ちに返されます。それ以外の場合、この関数は得られた String を日付および時刻として解釈し、その日付および時刻に対応する UTC 時間値である Number を返します。String の内容に応じて、ローカル時刻、UTC 時刻、または他のタイムゾーンの時刻として解釈される場合があります。関数はまず、拡張年を含め、日付時刻文字列形式(21.4.1.32)で説明される形式に従って String の構文解析を試みます。String がその形式に適合しない場合、関数は任意の実装固有のヒューリスティックまたは実装固有の日付形式へフォールバックしてもかまいません。認識不能な文字列、または範囲外の形式要素値を含む文字列では、この関数は NaN を返さなければなりません。

String が日付時刻文字列形式に適合する場合、存在しない形式要素は代替値で置き換えられます。MM または DD 要素が存在しない場合、"01" が使用されます。HH、mm、または ss 要素が存在しない場合、"00" が使用されます。sss 要素が存在しない場合、"000" が使用されます。UTC オフセット表現が存在しない場合、日付のみの形式は UTC 時刻として解釈され、日付時刻形式はローカル時刻として解釈されます。

x が、特定の ECMAScript 実装においてミリ秒部分がゼロである任意の Date である場合、参照されるすべてのプロパティが初期値を持っていれば、次のすべての式はその実装で同じ数値を生成するべきです。

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

ただし、式

Date.parse(x.toLocaleString())

は、前の3つの式と同じ Number 値を生成する必要はありません。一般に、この関数に、日付時刻文字列形式(21.4.1.32)に適合せず、その実装の toString または toUTCString メソッドによって生成することもできない任意の String 値が渡された場合、この関数によって生成される値は実装定義です。

21.4.3.3 Date.prototype

Date.prototype の初期値は Date prototype オブジェクトです。

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

21.4.3.4 Date.UTC ( year [ , month [ , day [ , hour [ , minute [ , second [ , millisecond ] ] ] ] ] ] )

この関数は呼び出されたとき、次の手順を実行します。

  1. yearNumber を ? ToNumber(year) とする。
  2. month が存在する場合、monthNumber を ? ToNumber(month) とする。そうでない場合、monthNumber を +0𝔽 とする。
  3. day が存在する場合、dayNumber を ? ToNumber(day) とする。そうでない場合、dayNumber を 1𝔽 とする。
  4. hour が存在する場合、hourNumber を ? ToNumber(hour) とする。そうでない場合、hourNumber を +0𝔽 とする。
  5. minute が存在する場合、minuteNumber を ? ToNumber(minute) とする。そうでない場合、minuteNumber を +0𝔽 とする。
  6. second が存在する場合、secondNumber を ? ToNumber(second) とする。そうでない場合、secondNumber を +0𝔽 とする。
  7. millisecond が存在する場合、millisecondNumber を ? ToNumber(millisecond) とする。そうでない場合、millisecondNumber を +0𝔽 とする。
  8. yearNumber を MakeFullYear(yearNumber) に設定する。
  9. TimeClip(MakeDate(MakeDay(yearNumber, monthNumber, dayNumber), MakeTime(hourNumber, minuteNumber, secondNumber, millisecondNumber))) を返す。

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

注

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

21.4.4 Date Prototype オブジェクトのプロパティ

Date prototype オブジェクトは:

  • %Date.prototype% です。
  • それ自体が通常オブジェクトです。
  • Date インスタンスではなく、[[DateValue]] 内部スロットを持ちません。
  • 値が %Object.prototype% である [[Prototype]] 内部スロットを持ちます。

明示的に別段の定義がない限り、以下で定義される Date prototype オブジェクトのメソッドは汎用ではなく、それらに渡される this 値は、時間値に初期化された [[DateValue]] 内部スロットを持つオブジェクトでなければなりません。

21.4.4.1 Date.prototype.constructor

Date.prototype.constructor の初期値は %Date% です。

21.4.4.2 Date.prototype.getDate ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(DateFromTime(LocalTime(tv))) を返す。

21.4.4.3 Date.prototype.getDay ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(WeekDay(LocalTime(tv))) を返す。

21.4.4.4 Date.prototype.getFullYear ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(YearFromTime(LocalTime(tv))) を返す。

21.4.4.5 Date.prototype.getHours ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(HourFromTime(LocalTime(tv))) を返す。

21.4.4.6 Date.prototype.getMilliseconds ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(MillisecondFromTime(LocalTime(tv))) を返す。

21.4.4.7 Date.prototype.getMinutes ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(MinuteFromTime(LocalTime(tv))) を返す。

21.4.4.8 Date.prototype.getMonth ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(MonthFromTime(LocalTime(tv))) を返す。

21.4.4.9 Date.prototype.getSeconds ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(SecondFromTime(LocalTime(tv))) を返す。

21.4.4.10 Date.prototype.getTime ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. dateObj.[[DateValue]] を返す。

21.4.4.11 Date.prototype.getTimezoneOffset ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. (tv - LocalTime(tv)) / 𝔽(MillisecondsPerMinute) を返す。

21.4.4.12 Date.prototype.getUTCDate ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(DateFromTime(tv)) を返す。

21.4.4.13 Date.prototype.getUTCDay ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(WeekDay(tv)) を返す。

21.4.4.14 Date.prototype.getUTCFullYear ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(YearFromTime(tv)) を返す。

21.4.4.15 Date.prototype.getUTCHours ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(HourFromTime(tv)) を返す。

21.4.4.16 Date.prototype.getUTCMilliseconds ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(MillisecondFromTime(tv)) を返す。

21.4.4.17 Date.prototype.getUTCMinutes ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(MinuteFromTime(tv)) を返す。

21.4.4.18 Date.prototype.getUTCMonth ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(MonthFromTime(tv)) を返す。

21.4.4.19 Date.prototype.getUTCSeconds ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(SecondFromTime(tv)) を返す。

21.4.4.20 Date.prototype.setDate ( day )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. dayNumber を ? ToNumber(day) とする。
  5. tv が NaN である場合、NaN を返す。
  6. tv を LocalTime(tv) に設定する。
  7. newDate を MakeDate(MakeDay(𝔽(YearFromTime(tv)), 𝔽(MonthFromTime(tv)), dayNumber), 𝔽(TimeWithinDay(tv))) とする。
  8. u を TimeClip(UTC(newDate)) とする。
  9. dateObj.[[DateValue]] を u に設定する。
  10. u を返す。

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

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. yearNumber を ? ToNumber(year) とする。
  5. tv が NaN である場合、tv を +0𝔽 に設定する。そうでない場合、tv を LocalTime(tv) に設定する。
  6. month が存在する場合、monthNumber を ? ToNumber(month) とする。そうでない場合、monthNumber を 𝔽(MonthFromTime(tv)) とする。
  7. day が存在する場合、dayNumber を ? ToNumber(day) とする。そうでない場合、dayNumber を 𝔽(DateFromTime(tv)) とする。
  8. newDate を MakeDate(MakeDay(yearNumber, monthNumber, dayNumber), 𝔽(TimeWithinDay(tv))) とする。
  9. u を TimeClip(UTC(newDate)) とする。
  10. dateObj.[[DateValue]] を u に設定する。
  11. u を返す。

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

注

month が存在しない場合、このメソッドは month が値 getMonth() で存在したかのように動作します。day が存在しない場合、day が値 getDate() で存在したかのように動作します。

21.4.4.22 Date.prototype.setHours ( hour [ , minute [ , second [ , millisecond ] ] ] )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. hourNumber を ? ToNumber(hour) とする。
  5. minute が存在する場合、minuteNumber を ? ToNumber(minute) とする。
  6. second が存在する場合、secondNumber を ? ToNumber(second) とする。
  7. millisecond が存在する場合、millisecondNumber を ? ToNumber(millisecond) とする。
  8. tv が NaN である場合、NaN を返す。
  9. tv を LocalTime(tv) に設定する。
  10. minute が存在しない場合、minuteNumber を 𝔽(MinuteFromTime(tv)) とする。
  11. second が存在しない場合、secondNumber を 𝔽(SecondFromTime(tv)) とする。
  12. millisecond が存在しない場合、millisecondNumber を 𝔽(MillisecondFromTime(tv)) とする。
  13. date を MakeDate(𝔽(Day(tv)), MakeTime(hourNumber, minuteNumber, secondNumber, millisecondNumber)) とする。
  14. u を TimeClip(UTC(date)) とする。
  15. dateObj.[[DateValue]] を u に設定する。
  16. u を返す。

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

注

minute が存在しない場合、このメソッドは minute が値 getMinutes() で存在したかのように動作します。second が存在しない場合、second が値 getSeconds() で存在したかのように動作します。millisecond が存在しない場合、millisecond が値 getMilliseconds() で存在したかのように動作します。

21.4.4.23 Date.prototype.setMilliseconds ( millisecond )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. millisecondNumber を ? ToNumber(millisecond) とする。
  5. tv が NaN である場合、NaN を返す。
  6. tv を LocalTime(tv) に設定する。
  7. time を MakeTime(𝔽(HourFromTime(tv)), 𝔽(MinuteFromTime(tv)), 𝔽(SecondFromTime(tv)), millisecondNumber) とする。
  8. u を TimeClip(UTC(MakeDate(𝔽(Day(tv)), time))) とする。
  9. dateObj.[[DateValue]] を u に設定する。
  10. u を返す。

21.4.4.24 Date.prototype.setMinutes ( minute [ , second [ , millisecond ] ] )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. minuteNumber を ? ToNumber(minute) とする。
  5. second が存在する場合、secondNumber を ? ToNumber(second) とする。
  6. millisecond が存在する場合、millisecondNumber を ? ToNumber(millisecond) とする。
  7. tv が NaN である場合、NaN を返す。
  8. tv を LocalTime(tv) に設定する。
  9. second が存在しない場合、secondNumber を 𝔽(SecondFromTime(tv)) とする。
  10. millisecond が存在しない場合、millisecondNumber を 𝔽(MillisecondFromTime(tv)) とする。
  11. date を MakeDate(𝔽(Day(tv)), MakeTime(𝔽(HourFromTime(tv)), minuteNumber, secondNumber, millisecondNumber)) とする。
  12. u を TimeClip(UTC(date)) とする。
  13. dateObj.[[DateValue]] を u に設定する。
  14. u を返す。

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

注

second が存在しない場合、このメソッドは second が値 getSeconds() で存在したかのように動作します。millisecond が存在しない場合、millisecond が値 getMilliseconds() で存在したかのように動作します。

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

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. monthNumber を ? ToNumber(month) とする。
  5. day が存在する場合、dayNumber を ? ToNumber(day) とする。
  6. tv が NaN である場合、NaN を返す。
  7. tv を LocalTime(tv) に設定する。
  8. day が存在しない場合、dayNumber を 𝔽(DateFromTime(tv)) とする。
  9. newDate を MakeDate(MakeDay(𝔽(YearFromTime(tv)), monthNumber, dayNumber), 𝔽(TimeWithinDay(tv))) とする。
  10. u を TimeClip(UTC(newDate)) とする。
  11. dateObj.[[DateValue]] を u に設定する。
  12. u を返す。

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

注

day が存在しない場合、このメソッドは day が値 getDate() で存在したかのように動作します。

21.4.4.26 Date.prototype.setSeconds ( second [ , millisecond ] )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. secondNumber を ? ToNumber(second) とする。
  5. millisecond が存在する場合、millisecondNumber を ? ToNumber(millisecond) とする。
  6. tv が NaN である場合、NaN を返す。
  7. tv を LocalTime(tv) に設定する。
  8. millisecond が存在しない場合、millisecondNumber を 𝔽(MillisecondFromTime(tv)) とする。
  9. date を MakeDate(𝔽(Day(tv)), MakeTime(𝔽(HourFromTime(tv)), 𝔽(MinuteFromTime(tv)), secondNumber, millisecondNumber)) とする。
  10. u を TimeClip(UTC(date)) とする。
  11. dateObj.[[DateValue]] を u に設定する。
  12. u を返す。

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

注

millisecond が存在しない場合、このメソッドは millisecond が値 getMilliseconds() で存在したかのように動作します。

21.4.4.27 Date.prototype.setTime ( time )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. t を ? ToNumber(time) とする。
  4. v を TimeClip(t) とする。
  5. dateObj.[[DateValue]] を v に設定する。
  6. v を返す。

21.4.4.28 Date.prototype.setUTCDate ( day )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. dayNumber を ? ToNumber(day) とする。
  5. tv が NaN である場合、NaN を返す。
  6. newDate を MakeDate(MakeDay(𝔽(YearFromTime(tv)), 𝔽(MonthFromTime(tv)), dayNumber), 𝔽(TimeWithinDay(tv))) とする。
  7. v を TimeClip(newDate) とする。
  8. dateObj.[[DateValue]] を v に設定する。
  9. v を返す。

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

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、tv を +0𝔽 に設定する。
  5. yearNumber を ? ToNumber(year) とする。
  6. month が存在する場合、monthNumber を ? ToNumber(month) とする。そうでない場合、monthNumber を 𝔽(MonthFromTime(tv)) とする。
  7. day が存在する場合、dayNumber を ? ToNumber(day) とする。そうでない場合、dayNumber を 𝔽(DateFromTime(tv)) とする。
  8. newDate を MakeDate(MakeDay(yearNumber, monthNumber, dayNumber), 𝔽(TimeWithinDay(tv))) とする。
  9. v を TimeClip(newDate) とする。
  10. dateObj.[[DateValue]] を v に設定する。
  11. v を返す。

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

注

month が存在しない場合、このメソッドは month が値 getUTCMonth() で存在したかのように動作します。day が存在しない場合、day が値 getUTCDate() で存在したかのように動作します。

21.4.4.30 Date.prototype.setUTCHours ( hour [ , minute [ , second [ , millisecond ] ] ] )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. hourNumber を ? ToNumber(hour) とする。
  5. minute が存在する場合、minuteNumber を ? ToNumber(minute) とする。
  6. second が存在する場合、secondNumber を ? ToNumber(second) とする。
  7. millisecond が存在する場合、millisecondNumber を ? ToNumber(millisecond) とする。
  8. tv が NaN である場合、NaN を返す。
  9. minute が存在しない場合、minuteNumber を 𝔽(MinuteFromTime(tv)) とする。
  10. second が存在しない場合、secondNumber を 𝔽(SecondFromTime(tv)) とする。
  11. millisecond が存在しない場合、millisecondNumber を 𝔽(MillisecondFromTime(tv)) とする。
  12. date を MakeDate(𝔽(Day(tv)), MakeTime(hourNumber, minuteNumber, secondNumber, millisecondNumber)) とする。
  13. v を TimeClip(date) とする。
  14. dateObj.[[DateValue]] を v に設定する。
  15. v を返す。

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

注

minute が存在しない場合、このメソッドは minute が値 getUTCMinutes() で存在したかのように動作します。second が存在しない場合、second が値 getUTCSeconds() で存在したかのように動作します。millisecond が存在しない場合、millisecond が値 getUTCMilliseconds() で存在したかのように動作します。

21.4.4.31 Date.prototype.setUTCMilliseconds ( millisecond )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. millisecondNumber を ? ToNumber(millisecond) とする。
  5. tv が NaN である場合、NaN を返す。
  6. time を MakeTime(𝔽(HourFromTime(tv)), 𝔽(MinuteFromTime(tv)), 𝔽(SecondFromTime(tv)), millisecondNumber) とする。
  7. v を TimeClip(MakeDate(𝔽(Day(tv)), time)) とする。
  8. dateObj.[[DateValue]] を v に設定する。
  9. v を返す。

21.4.4.32 Date.prototype.setUTCMinutes ( minute [ , second [ , millisecond ] ] )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. minuteNumber を ? ToNumber(minute) とする。
  5. second が存在する場合、secondNumber を ? ToNumber(second) とする。
  6. millisecond が存在する場合、millisecondNumber を ? ToNumber(millisecond) とする。
  7. tv が NaN である場合、NaN を返す。
  8. second が存在しない場合、secondNumber を 𝔽(SecondFromTime(tv)) とする。
  9. millisecond が存在しない場合、millisecondNumber を 𝔽(MillisecondFromTime(tv)) とする。
  10. date を MakeDate(𝔽(Day(tv)), MakeTime(𝔽(HourFromTime(tv)), minuteNumber, secondNumber, millisecondNumber)) とする。
  11. v を TimeClip(date) とする。
  12. dateObj.[[DateValue]] を v に設定する。
  13. v を返す。

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

注

second が存在しない場合、このメソッドは second が値 getUTCSeconds() で存在したかのように動作します。millisecond が存在しない場合、millisecond が getUTCMilliseconds() によって返される値で存在したかのように動作します。

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

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. monthNumber を ? ToNumber(month) とする。
  5. day が存在する場合、dayNumber を ? ToNumber(day) とする。
  6. tv が NaN である場合、NaN を返す。
  7. day が存在しない場合、dayNumber を 𝔽(DateFromTime(tv)) とする。
  8. newDate を MakeDate(MakeDay(𝔽(YearFromTime(tv)), monthNumber, dayNumber), 𝔽(TimeWithinDay(tv))) とする。
  9. v を TimeClip(newDate) とする。
  10. dateObj.[[DateValue]] を v に設定する。
  11. v を返す。

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

注

day が存在しない場合、このメソッドは day が値 getUTCDate() で存在したかのように動作します。

21.4.4.34 Date.prototype.setUTCSeconds ( second [ , millisecond ] )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. secondNumber を ? ToNumber(second) とする。
  5. millisecond が存在する場合、millisecondNumber を ? ToNumber(millisecond) とする。
  6. tv が NaN である場合、NaN を返す。
  7. millisecond が存在しない場合、millisecondNumber を 𝔽(MillisecondFromTime(tv)) とする。
  8. date を MakeDate(𝔽(Day(tv)), MakeTime(𝔽(HourFromTime(tv)), 𝔽(MinuteFromTime(tv)), secondNumber, millisecondNumber)) とする。
  9. v を TimeClip(date) とする。
  10. dateObj.[[DateValue]] を v に設定する。
  11. v を返す。

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

注

millisecond が存在しない場合、このメソッドは millisecond が値 getUTCMilliseconds() で存在したかのように動作します。

21.4.4.35 Date.prototype.toDateString ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、"Invalid Date" を返す。
  5. t を LocalTime(tv) とする。
  6. DateString(t) を返す。

21.4.4.36 Date.prototype.toISOString ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、RangeError 例外をスローする。
  5. 表明: tv は整数 Number である。
  6. tv が日付時刻文字列形式で表現できない年に対応する場合、RangeError 例外をスローする。
  7. UTC 時間尺度上で、すべての形式要素と UTC オフセット表現 "Z" を含む、日付時刻文字列形式による tv の String 表現を返す。

21.4.4.37 Date.prototype.toJSON ( key )

このメソッドは JSON.stringify(25.5.4)で使用するための Date の String 表現を提供します。

呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. tv を ? ToPrimitive(obj, number) とする。
  3. tv が Number であり、かつ tv が有限 Number でない場合、null を返す。
  4. ? Invoke(obj, "toISOString") を返す。
注 1

引数は無視されます。

注 2

このメソッドは意図的に汎用です。this 値が Date であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。ただし、そのようなオブジェクトは toISOString メソッドを持つ必要があります。

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

ECMA-402 Internationalization API を含む ECMAScript 実装は、ECMA-402 で規定されるとおりにこのメソッドを実装しなければなりません。それ以外の場合、このメソッドには次の仕様が使用されます。

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

このメソッドの省略可能なパラメーターの意味は ECMA-402 で定義されます。ECMA-402 のサポートを含まない実装は、それらのパラメーター位置を他の目的に使用してはなりません。

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

ECMA-402 Internationalization API を含む ECMAScript 実装は、ECMA-402 で規定されるとおりにこのメソッドを実装しなければなりません。それ以外の場合、このメソッドには次の仕様が使用されます。

このメソッドは String 値を返します。String の内容は実装定義ですが、ホスト環境の現在のロケールの慣例に対応する、便利で人間が読みやすい形式で、現在のタイムゾーンにおける Date を表すことを意図しています。

このメソッドの省略可能なパラメーターの意味は ECMA-402 で定義されます。ECMA-402 のサポートを含まない実装は、それらのパラメーター位置を他の目的に使用してはなりません。

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

ECMA-402 Internationalization API を含む ECMAScript 実装は、ECMA-402 で規定されるとおりにこのメソッドを実装しなければなりません。それ以外の場合、このメソッドには次の仕様が使用されます。

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

このメソッドの省略可能なパラメーターの意味は ECMA-402 で定義されます。ECMA-402 のサポートを含まない実装は、それらのパラメーター位置を他の目的に使用してはなりません。

21.4.4.41 Date.prototype.toString ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. ToDateString(tv) を返す。
注 1

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

注 2

このメソッドは汎用ではありません。this 値が Date でない場合、TypeError 例外をスローします。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことはできません。

21.4.4.41.1 TimeString ( tv )

抽象操作 TimeString。引数 tv (a Number, but not NaN)。戻り値:String。 呼び出されると、次の手順を実行する。

  1. hour を ToZeroPaddedDecimalString(HourFromTime(tv), 2) とする。
  2. minute を ToZeroPaddedDecimalString(MinuteFromTime(tv), 2) とする。
  3. second を ToZeroPaddedDecimalString(SecondFromTime(tv), 2) とする。
  4. hour、":"、minute、":"、second、コード単位 0x0020 (SPACE)、および "GMT" の文字列連結を返す。

21.4.4.41.2 DateString ( tv )

抽象操作 DateString。引数 tv (a Number, but not NaN)。戻り値:String。 呼び出されると、次の手順を実行する。

  1. weekday を、表 61 内で WeekDay Index = WeekDay(tv) である項目の Name とする。
  2. month を、表 62 内で Month Index = MonthFromTime(tv) である項目の Name とする。
  3. day を ToZeroPaddedDecimalString(DateFromTime(tv), 2) とする。
  4. yv を YearFromTime(tv) とする。
  5. yv ≥ 0 である場合、yearSign を空の String とする。そうでない場合、yearSign を "-" とする。
  6. paddedYear を ToZeroPaddedDecimalString(abs(yv), 4) とする。
  7. weekday、コード単位 0x0020 (SPACE)、month、コード単位 0x0020 (SPACE)、day、コード単位 0x0020 (SPACE)、yearSign、および paddedYear の文字列連結を返す。
表 61: 曜日の名前
WeekDay インデックス 名前
0 "Sun"
1 "Mon"
2 "Tue"
3 "Wed"
4 "Thu"
5 "Fri"
6 "Sat"
表 62: 年の月の名前
Month インデックス 名前
0 "Jan"
1 "Feb"
2 "Mar"
3 "Apr"
4 "May"
5 "Jun"
6 "Jul"
7 "Aug"
8 "Sep"
9 "Oct"
10 "Nov"
11 "Dec"

21.4.4.41.3 TimeZoneString ( tv )

抽象操作 TimeZoneString。引数 tv (整数の Number)。戻り値:String。 呼び出されると、次の手順を実行する。

  1. systemTimeZoneIdentifier を SystemTimeZoneIdentifier() とする。
  2. IsTimeZoneOffsetString(systemTimeZoneIdentifier) が true である場合、
    1. offsetNanoseconds を ParseTimeZoneOffsetString(systemTimeZoneIdentifier) とする。
  3. そうでない場合、
    1. offsetNanoseconds を GetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, ℝ(tv) × NanosecondsPerMillisecond) とする。
  4. offsetMilliseconds を truncate(offsetNanoseconds / NanosecondsPerMillisecond) とする。
  5. offsetMilliseconds ≥ 0 である場合、
    1. offsetSign を "+" とする。
    2. absOffsetMilliseconds を offsetMilliseconds とする。
  6. そうでない場合、
    1. offsetSign を "-" とする。
    2. absOffsetMilliseconds を -offsetMilliseconds とする。
  7. offsetMinute を ToZeroPaddedDecimalString(MinuteFromTime(𝔽(absOffsetMilliseconds)), 2) とする。
  8. offsetHour を ToZeroPaddedDecimalString(HourFromTime(𝔽(absOffsetMilliseconds)), 2) とする。
  9. timeZoneName を、空の String、またはコード単位 0x0020 (SPACE)、コード単位 0x0028 (LEFT PARENTHESIS)、実装定義のタイムゾーン名、およびコード単位 0x0029 (RIGHT PARENTHESIS) の文字列連結のいずれかである実装定義の文字列とする。
  10. offsetSign、offsetHour、offsetMinute、および timeZoneName の文字列連結を返す。

21.4.4.41.4 ToDateString ( tv )

抽象操作 ToDateString。引数 tv ((整数の Number または NaN))。戻り値:String。 呼び出されると、次の手順を実行する。

  1. tv が NaN である場合、"Invalid Date" を返す。
  2. localTime を LocalTime(tv) とする。
  3. DateString(localTime)、コード単位 0x0020 (SPACE)、TimeString(localTime)、および TimeZoneString(tv) の文字列連結を返す。

21.4.4.42 Date.prototype.toTimeString ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、"Invalid Date" を返す。
  5. localTime を LocalTime(tv) とする。
  6. TimeString(localTime) と TimeZoneString(tv) の文字列連結を返す。

21.4.4.43 Date.prototype.toUTCString ( )

このメソッドは、this 値に対応する時点を表す String 値を返します。String の形式は RFC 7231 の HTTP-date に基づいており、ECMAScript Date がサポートする時間の全範囲をサポートするよう一般化されています。

呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、"Invalid Date" を返す。
  5. weekday を、表 61 内で WeekDay Index = WeekDay(tv) である項目の Name とする。
  6. month を、表 62 内で Month Index = MonthFromTime(tv) である項目の Name とする。
  7. day を ToZeroPaddedDecimalString(DateFromTime(tv), 2) とする。
  8. yv を YearFromTime(tv) とする。
  9. yv ≥ 0 である場合、yearSign を空の String とする。そうでない場合、yearSign を "-" とする。
  10. paddedYear を ToZeroPaddedDecimalString(abs(yv), 4) とする。
  11. weekday、","、コード単位 0x0020 (SPACE)、day、コード単位 0x0020 (SPACE)、month、コード単位 0x0020 (SPACE)、yearSign、paddedYear、コード単位 0x0020 (SPACE)、および TimeString(tv) の文字列連結を返す。

21.4.4.44 Date.prototype.valueOf ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. dateObj.[[DateValue]] を返す。

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

このメソッドは、Date をプリミティブ値へ変換するために ECMAScript 言語演算子によって呼び出されます。hint に許される値は "default"、"number"、および "string" です。Date は、"default" を "string" と同等に扱うという点で組込み ECMAScript オブジェクトの中で固有です。その他のすべての組込み ECMAScript オブジェクトは "default" を "number" と同等に扱います。

呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. obj が Object でない場合、TypeError 例外をスローする。
  3. hint が "string" または "default" のいずれかである場合、
    1. tryFirst を string とする。
  4. そうでなく、hint が "number" である場合、
    1. tryFirst を number とする。
  5. そうでない場合、
    1. TypeError 例外をスローする。
  6. ? OrdinaryToPrimitive(obj, tryFirst) を返す。

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

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

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

Date インスタンスは、Date prototype オブジェクトからプロパティを継承する通常オブジェクトです。Date インスタンスは [[DateValue]] 内部スロットも持ちます。[[DateValue]] 内部スロットは、この Date によって表される時間値です。