21 Numbers and Dates

21.1 数値オブジェクト

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. obj を ? OrdinaryCreateFromConstructor(NewTarget, "%Number.prototype%", « [[NumberData]] ») とする。
  5. obj.[[NumberData]]n を設定する。
  6. obj を返す。

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

Numberコンストラクターは:

  • [[Prototype]]内部スロットを持ち、その値は %Function.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

この関数はグローバル関数 isNaN (19.2.3) とは異なり、引数をNumberに変換してから NaN かどうかを判定しません。

21.1.2.5 Number.isSafeInteger ( number )

Note

整数 n が "安全な整数" であるのは、n のNumber値が他の整数のNumber値と一致しない場合に限ります。

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

  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 の倍精度二進表現では、最小値は非正規化数です。実装が非正規化値をサポートしない場合、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オブジェクトであり、[[NumberData]] 内部スロットを持ち、その値は +0𝔽 です。
  • [[Prototype]] 内部スロットを持ち、その値は %Object.prototype% です。

特に明記されていない限り、下記に定義されるNumberプロトタイプオブジェクトのメソッドは汎用的ではなく、渡される this 値はNumber値か、Number値で初期化された [[NumberData]] 内部スロットを持つオブジェクトでなければなりません。

メソッド仕様内の “this Number value” は、抽象操作 ThisNumberValue に this 値を渡した結果を指します。

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を一意に特定するのに必要な桁数を使用します。

呼び出されたとき、以下の手順を実行します:

  1. numberValue を ? ThisNumberValue(this value) とする。
  2. fractionCount を ? ToIntegerOrInfinity(fractionDigits) とする。
  3. Assert: fractionDigitsundefined ならば、fractionCount は 0 である。
  4. numberValue が有限でないならば、Number::toString(numberValue, 10) を返す。
  5. fractionCount < 0 または fractionCount > 100 ならば、RangeError 例外を投げる。
  6. numberValue(numberValue) に設定する。
  7. sign を空の String とする。
  8. numberValue < 0 ならば、
    1. sign"-" に設定する。
    2. numberValue を -numberValue に設定する。
  9. numberValue = 0 ならば、
    1. significand を、コード単位 0x0030 (DIGIT ZERO) が fractionCount + 1 個出現するものからなる String 値とする。
    2. exponent を 0 とする。
  10. そうでなければ、
    1. fractionDigitsundefined でないならば、
      1. exponentintSignificand を、10fractionCountintSignificand < 10fractionCount + 1 であり、かつ intSignificand × 10exponent - fractionCount - numberValue が可能な限りゼロに近くなるような整数とする。そのような exponentintSignificand の組が 2 つある場合、intSignificand × 10exponent - fractionCount がより大きい方の exponentintSignificand を選ぶ。
    2. そうでなければ、
      1. exponentintSignificand、および ff を、ff ≥ 0、10ffintSignificand < 10ff + 1𝔽(intSignificand × 10exponent - ff) が 𝔽(numberValue) であり、かつ ff が可能な限り小さいような整数とする。intSignificand の十進表現は ff + 1 桁であり、intSignificand は 10 で割り切れず、intSignificand の最下位桁はこれらの基準によって必ずしも一意に定まらないことに注意。
      2. fractionCountff に設定する。
    3. significand を、intSignificand の十進表現の各桁からなる String 値(順に、先頭のゼロなし)とする。
  11. fractionCount ≠ 0 ならば、
    1. integerPartsignificand の最初のコード単位とする。
    2. fractionalPartsignificand の他の fractionCount 個のコード単位とする。
    3. significand を、integerPart"."、および fractionalPart の文字列連結に設定する。
  12. exponent = 0 ならば、
    1. exponentSign"+" とする。
    2. exponentDigits"0" とする。
  13. そうでなければ、
    1. exponent > 0 ならば、
      1. exponentSign"+" とする。
    2. そうでなければ、
      1. Assert: exponent < 0。
      2. exponentSign"-" とする。
      3. exponent を -exponent に設定する。
    3. exponentDigits を、exponent の十進表現の各桁からなる String 値(順に、先頭のゼロなし)とする。
  14. significand を、significand"e"exponentSign、および exponentDigits の文字列連結に設定する。
  15. signsignificand の文字列連結を返す。
Note

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

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

21.1.3.3 Number.prototype.toFixed ( fractionDigits )

Note 1

このメソッドは、このNumber値を小数固定表記で文字列として返します。小数点以下に fractionDigits 桁を表示します。fractionDigitsundefined の場合、0が使用されます。

呼び出されたとき、以下の手順を実行します:

  1. numberValue を ? ThisNumberValue(this value) とする。
  2. fractionCount を ? ToIntegerOrInfinity(fractionDigits) とする。
  3. Assert: fractionDigitsundefined の場合、fractionCount は 0。
  4. fractionCount が有限でなければ RangeError を投げる。
  5. fractionCount < 0 または fractionCount > 100 なら RangeError を投げる。
  6. numberValue が有限でなければ Number::toString(numberValue, 10) を返す。
  7. numberValue(numberValue) に設定。
  8. sign を空文字列に設定。
  9. numberValue < 0 なら、sign を "-" に設定し、numberValue を -numberValue にする。
  10. numberValue ≥ 1021 の場合、digitString を ! ToString(𝔽(numberValue)) とする。
  11. それ以外の場合、整数値を求め、digitString を生成、fractionCount に応じて小数点を付与。
  12. signdigitString を連結して返す。
Note 2

toFixedtoString よりも正確に表示される場合があります。例:

(1000000000000000128).toString()"1000000000000000100" を返しますが、
(1000000000000000128).toFixed(0)"1000000000000000128" を返します。

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

ECMA-402 Internationalization API を含む実装では、このメソッドを ECMA-402 の仕様に従って実装する必要があります。APIを含まない場合、ホスト環境の現在のロケールに従った文字列を返す実装定義の仕様が適用されます。

21.1.3.5 Number.prototype.toPrecision ( precision )

このメソッドは、このNumber値を小数点1桁と precision - 1 桁の指数表記か、precision 桁の固定表記で文字列として返します。precisionundefined の場合、ToStringを呼びます。

呼び出されたとき、以下の手順を実行します:

  1. numberValue を ? ThisNumberValue(this value) とする。
  2. precisionundefined なら ! ToString(numberValue) を返す。
  3. precisionCount を ? ToIntegerOrInfinity(precision) とする。
  4. numberValue が有限でなければ Number::toString(numberValue, 10) を返す。
  5. precisionCount < 1 または precisionCount > 100 なら RangeError を投げる。
  6. numberValue(numberValue) に設定。
  7. sign を空文字列に設定。
  8. numberValue < 0 なら sign を "-" に設定し、numberValue を -numberValue にする。
  9. numberValue = 0 なら、significand に0を precisionCount 回繰り返した文字列を設定、exponent を 0。
  10. それ以外の場合、exponent, intSignificand を計算して significand を作成。
  11. 結果として signsignificand を連結して返す。

21.1.3.6 Number.prototype.toString ( [ radix ] )

Note

オプションの radix は2~36の整数であるべきです。radixundefined の場合、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: ECMAScript言語値, ): Numberを含む通常完了または例外

  1. value がNumberなら value を返す。
  2. value がオブジェクトで [[NumberData]] 内部スロットを持つ場合:
    1. nvalue.[[NumberData]] とする。
    2. Assert: n はNumber。
    3. n を返す。
  3. TypeError を投げる。

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

Numberインスタンスは通常のオブジェクトで、Numberプロトタイプオブジェクトからプロパティを継承します。Numberインスタンスは [[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: Number, ): BigIntを返すか例外を投げる

  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) を返す。
  5. (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” は、抽象操作 ThisBigIntValue に this 値を渡した結果を指します。

21.2.3.1 BigInt.prototype.constructor

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

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

ECMA-402 Internationalization API を含む実装では、ECMA-402 仕様に従ってこのメソッドを実装する必要があります。含まない場合、ホスト環境のロケールに従った文字列を返す実装定義の仕様が適用されます。

21.2.3.3 BigInt.prototype.toString ( [ radix ] )

Note

オプションの radix は2~36の整数であるべきです。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: ECMAScript言語値, ): BigIntを返すか例外を投げる

  1. value がBigIntなら value を返す。
  2. value がオブジェクトで [[BigIntData]] 内部スロットを持つ場合:
    1. 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]] 内部スロットを持ち、このBigIntオブジェクトが表すBigInt値を保持します。

21.3 Mathオブジェクト

Mathオブジェクトは以下の通りです:

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

この仕様書において、“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 の常用対数値のNumber値で、おおよそ 0.4342944819032518。

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

Note

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

21.3.1.5 Math.LOG2E

自然対数の底 e の二進対数値の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

½ の平方根の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. nNaNn > 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.cbrt ( x )

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

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

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

21.3.2.6 Math.ceil ( x )

この関数は x 以上で -∞ に最も近い整数Number値を返します。x が既に整数Numberの場合、結果は x です。

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

  1. n を ? ToNumber(x) とする。
  2. 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.7 Math.clz32 ( x )

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

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

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

21.3.2.8 Math.cos ( x )

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

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

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

21.3.2.9 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.10 Math.exp ( x )

この関数は x の指数関数 (ex 乗、ここで e は自然対数の底) を返します。

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

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

21.3.2.11 Math.expm1 ( x )

この関数は x の指数関数 (ex 乗) から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.12 Math.log10 ( 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.13 Math.log2 ( 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.14 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.15 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.16 Math.pow ( base, exponent )

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

  1. base を ? ToNumber(base) とする。
  2. exponent を ? ToNumber(exponent) とする。
  3. Number::exponentiate(base, exponent) を返す。

21.3.2.17 Math.random ( )

この関数は正の符号を持つNumber値を返します。値は +0𝔽 以上かつ 1𝔽 未満で、実装定義のアルゴリズムまたは戦略によりランダムまたは疑似ランダムにほぼ一様に選ばれます。

異なる Realm のために作成された各 Math.random 関数は、連続呼び出しから得られる値の列が異なる必要があります。

21.3.2.18 Math.round ( x )

この関数は x に最も近い整数のNumber値を返します。二つの整数が同じ距離にある場合、+∞ に近い方を返します。x が既に整数の場合、結果は x です。

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

  1. n を ? ToNumber(x) とする。
  2. 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 を計算する際の丸めにより、Math.round(x)Math.floor(x + 0.5) と異なる場合もあります。

21.3.2.19 Math.sign ( x )

この関数は x の符号を返します。正、負、またはゼロを示します。

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

  1. n を ? ToNumber(x) とする。
  2. nNaN+0𝔽、または -0𝔽 の場合、n を返す。
  3. n < -0𝔽 の場合、-1𝔽 を返す。
  4. 1𝔽 を返す。

21.3.2.20 Math.sin ( x )

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

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

  1. n を ? ToNumber(x) とする。
  2. nNaN+0𝔽、または -0𝔽 の場合、n を返す。
  3. n+∞𝔽 または -∞𝔽 の場合、NaN を返す。
  4. (n) の正弦を表す実装近似のNumber値を返す。

21.3.2.21 Math.sinh ( x )

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

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

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

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

21.3.2.22 Math.sqrt ( x )

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

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

  1. n を ? ToNumber(x) とする。
  2. nNaN+0𝔽−0𝔽、または +∞𝔽 の場合、n を返す。
  3. n < -0𝔽 の場合、NaN を返す。
  4. (n) の平方根を表す実装近似のNumber値を返す。

21.3.2.23 Math.sumPrecise ( items )

Numberのイテラブルが与えられた場合、この関数は各値を合計し、その合計を返します。もし任意の値が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. NOTE: このステップは実際には到達しないことが期待され、実装が入力を「合理的なサイズ」と見なすために含まれる。
        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 の場合、statenot-a-number に設定する。
        2. n+∞𝔽 の場合:
          1. stateminus-infinity の場合、statenot-a-number に設定する。
          2. それ以外の場合、stateplus-infinity に設定する。
        3. n-∞𝔽 の場合:
          1. stateplus-infinity の場合、statenot-a-number に設定する。
          2. それ以外の場合、stateminus-infinity に設定する。
        4. 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 による「Grow-Expansion」アルゴリズムです。最近のアルゴリズムとしては "Fast exact summation using small and large superaccumulators" があり、コードは https://gitlab.com/radfordneal/xsum で利用可能です。

21.3.2.24 Math.tan ( x )

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

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

  1. n を ? ToNumber(x) とする。
  2. nNaN+0𝔽、または -0𝔽 の場合、n を返す。
  3. n+∞𝔽 または -∞𝔽 の場合、NaN を返す。
  4. (n) の正接を表す実装近似のNumber値を返す。

21.3.2.25 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.26 Math.trunc ( x )

この関数は x の整数部分を返します。小数部分は切り捨てられます。x が既に整数の場合、結果は x です。

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

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

21.4 Dateオブジェクト

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

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

21.4.1.1 時刻値と時刻範囲

ECMAScriptにおける時刻の測定はPOSIXにおける時刻の測定に類似しており、特に、先発グレゴリオ暦、1970年1月1日UTCの始まりの午前0時を エポック とすること、およびすべての日を正確に86,400秒(それぞれが1000ミリ秒の長さ)から成るものとして数えることによって定義される点を共有します。

ECMAScriptの 時刻値 はNumberであり、ミリ秒精度で時点を表す有限の整数Number、または特定の時点を表さない NaN のいずれかです。24 × 60 × 60 × 1000 = 86,400,000 の倍数である時刻値(すなわち、ある整数 d について 86,400,000 × d であるもの)は、エポックから d 個の完全なUTC日だけ後の(負の d ではエポックより前の)UTC日の開始時点を表します。他のすべての有限時刻値 t は、そのような倍数である直前の最大の時刻値 s に対して定義され、s と同じUTC日内で、(t - s) ミリ秒後に発生する時点を表します。

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

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

1970年1月1日UTCの始まりの午前0時ちょうどは、時刻値 +0𝔽 によって表されます。

Note

先発グレゴリオ暦では、うるう年は、4で割り切れ、かつ400で割り切れるか100で割り切れない年に厳密に該当します。

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

21.4.1.2 時刻関連の定数

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

HoursPerDay = 24
MinutesPerHour = 60
SecondsPerMinute = 60
msPerSecond = 1000𝔽
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 が属する日の通日番号を返します。 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 の最初の日の通日番号を返します。 It performs the following steps when called:

  1. ry(y) とする。
  2. NOTE: 以下のステップでは、numYears1numYears4numYears100、および 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𝔽 を返す。
  2. +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. Assert: dayWithinYear < 365𝔽 + inLeapYear
  15. 11𝔽 を返す。

21.4.1.12 DateFromTime ( t )

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

  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. Assert: 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 が属する日の時を返します。 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 が属する時の分を返します。 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 が属する分の秒を返します。 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 が属する秒のミリ秒を返します。 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. Assert: ms は整数Numberである。
  5. ((ms) × 106 + microsecond × 103 + nanosecond) を返す。

21.4.1.19 時間帯識別子

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

一次時間帯識別子 は、利用可能な名前付き時間帯の推奨識別子です。 非一次時間帯識別子 は、一次時間帯識別子ではない、利用可能な名前付き時間帯の識別子です。 利用可能な名前付き時間帯識別子 は、一次時間帯識別子または非一次時間帯識別子のいずれかです。 各利用可能な名前付き時間帯識別子は、ちょうど1つの利用可能な名前付き時間帯に関連付けられます。 各利用可能な名前付き時間帯は、ちょうど1つの一次時間帯識別子と、0個以上の非一次時間帯識別子に関連付けられます。

ECMAScript実装は、識別子 "UTC" を持つ利用可能な名前付き時間帯をサポートしなければならず、これはUTC時間帯の一次時間帯識別子でなければなりません。 さらに、実装は任意の数の他の利用可能な名前付き時間帯をサポートしてもかまいません。

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

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

The implementation-defined abstract operation GetNamedTimeZoneEpochNanoseconds takes arguments timeZoneIdentifier (String), year (整数), month (1から12までの包含区間内の整数), day (1から31までの包含区間内の整数), hour (0から23までの包含区間内の整数), minute (0から59までの包含区間内の整数), second (0から59までの包含区間内の整数), millisecond (0から999までの包含区間内の整数), microsecond (0から999までの包含区間内の整数), and nanosecond (0から999までの包含区間内の整数) and returns BigIntのList. 返されるList内の各値は、timeZoneIdentifier によって識別される名前付き時間帯における、与えられたISO 8601暦日および壁時計時刻に対応する、エポックからのナノ秒数を表します。

入力が負の時間帯遷移(たとえば夏時間の終了時、または時間帯規則の変更により時間帯オフセットが減少した場合)によって複数回発生するローカル時刻を表す場合、返されるListは複数の要素を持ち、数値の昇順にソートされます。 入力が正の時間帯遷移(たとえば夏時間の開始時、または時間帯規則の変更により時間帯オフセットが増加した場合)によってスキップされたローカル時刻を表す場合、返されるListは空になります。 それ以外の場合、返されるListは1つの要素を持ちます。

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

  1. Assert: 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/ の時間帯情報を使用することが要求されます。

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

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

21.4.1.21 GetNamedTimeZoneOffsetNanoseconds ( timeZoneIdentifier, epochNanoseconds )

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

返される整数は、timeZoneIdentifier によって識別される名前付き時間帯のUTCからのオフセットを、epochNanoseconds に対応するエポック相対の時点において、いずれもナノ秒単位で表します。

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

  1. Assert: timeZoneIdentifier"UTC" である。
  2. 0 を返す。
Note

時間帯オフセット値は正または負の場合があります。

21.4.1.22 Time Zone Identifier Record

Time Zone Identifier Record は、利用可能な名前付き時間帯識別子およびそれに対応する一次時間帯識別子を記述するために使用されるRecordです。

Time Zone Identifier Recordは、Table 59 に示されるフィールドを持ちます。

Table 59: Time Zone Identifier Record Fields
フィールド名 意味
[[Identifier]] String 実装によってサポートされる利用可能な名前付き時間帯識別子
[[PrimaryIdentifier]] String [[Identifier]] が解決される一次時間帯識別子
Note

[[Identifier]]一次時間帯識別子である場合、[[Identifier]][[PrimaryIdentifier]] です。

21.4.1.23 AvailableNamedTimeZoneIdentifiers ( )

The implementation-defined abstract operation AvailableNamedTimeZoneIdentifiers takes no arguments and returns Time Zone Identifier RecordList. その結果は、この実装におけるすべての利用可能な名前付き時間帯識別子、および各利用可能な名前付き時間帯識別子に対応する一次時間帯識別子を記述します。 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. primaryidentifier とする。
    2. identifier がこの実装における非一次時間帯識別子であり、かつ identifier"UTC" でない場合、次を行う:
      1. primaryidentifier に関連付けられた一次時間帯識別子に設定する。
      2. NOTE: 実装は、一次時間帯識別子を得るために identifier を反復的に解決する必要がある場合がある。
    3. recordTime Zone Identifier Record { [[Identifier]]: identifier, [[PrimaryIdentifier]]: primary } とする。
    4. recordresult に追加する。
  5. Assert: result は、r.[[Identifier]]"UTC" であり r.[[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. ホスト環境の現在の時間帯を表すStringを返します。これは、IsTimeZoneOffsetStringtrue を返すUTCオフセットを表すString、または一次時間帯識別子のいずれかです。 It performs the following steps when called:

  1. 実装がUTC時間帯のみをサポートする場合、"UTC" を返す。
  2. systemTimeZoneString を、ホスト環境の現在の時間帯を表すString、すなわち一次時間帯識別子またはオフセット時間帯識別子のいずれかとする。
  3. systemTimeZoneString を返す。
Note

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

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

21.4.1.25 LocalTime ( t )

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

  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. NOTE: 以下のステップは、t が負の時間帯遷移(たとえば夏時間の終了時、または時間帯規則の変更により時間帯オフセットが減少した場合)で複数回繰り返されるローカル時刻、または正の時間帯遷移(たとえば夏時間の開始時、または時間帯規則の変更により時間帯オフセットが増加した場合)でスキップされたローカル時刻を表す場合に、t が遷移前の時間帯オフセットを使用して解釈されることを保証する。
    3. possibleInstants が空でない場合、次を行う:
      1. disambiguatedInstantpossibleInstants[0] とする。
    4. それ以外の場合、
      1. NOTE: t は正の時間帯遷移(たとえば夏時間の開始または時間帯規則の変更によりUTCオフセットが増加すること)でスキップされたローカル時刻を表す。
      2. possibleInstantsBeforeGetNamedTimeZoneEpochNanoseconds(systemTimeZoneIdentifier, (YearFromTime(tBefore)), (MonthFromTime(tBefore)) + 1, (DateFromTime(tBefore)), (HourFromTime(tBefore)), (MinFromTime(tBefore)), (SecFromTime(tBefore)), (msFromTime(tBefore)), 0, 0) とする。ここで tBefore は、possibleInstantsBefore が空でないような t 未満の最大の整数Number(すなわち、tBefore は遷移前の最後のローカル時刻を表す)である。
      3. disambiguatedInstantpossibleInstantsBefore の最後の要素とする。
    5. offsetNsGetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, disambiguatedInstant) とする。
  5. offsetMstruncate(offsetNs / 106) とする。
  6. t - 𝔽(offsetMs) を返す。

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

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

Note 1

時間帯対応実装には(また他のすべての実装にも推奨として)、IANA Time Zone Database https://www.iana.org/time-zones/ の時間帯情報を使用することが要求されます。

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

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

Note 2

UTC(LocalTime(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 (a Number), month (a Number), and date (a Number) and returns a finite Number or NaN. 日数を計算します。 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 (a Number) and time (a Number) and returns a finite Number or NaN. ミリ秒数を計算します。 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 の整数部分に関連付けられた完全な年を返します。0から99までの包含区間内の任意の値は、1900年の開始からの年数として解釈されます。先発グレゴリオ暦との整合のため、「完全な年」は年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 (a Number) and returns a time value. ミリ秒数を計算します。 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 午前0時から経過した完全な時の数であり、00から24までの2桁の10進数字として表されます。
: ":"(コロン)は文字列内にそのまま2回現れます。
mm その時の開始からの完全な分の数であり、00から59までの2桁の10進数字として表されます。
ss その分の開始からの完全な秒の数であり、00から59までの2桁の10進数字として表されます。
. "."(ドット)は文字列内にそのまま現れます。
sss その秒の開始からの完全なミリ秒の数であり、3桁の10進数字として表されます。
Z UTCオフセット表現であり、"Z"(オフセットなしのUTC)として、または "+" もしくは "-" の後に時刻表現 HH:mm が続くもの(それぞれUTCより進んだ、または遅れたローカル時刻を示すための 時間帯オフセット文字列形式 のサブセット)として指定されます。

この形式には、日付のみの形式が含まれます:

YYYY
YYYY-MM
YYYY-MM-DD
        

また、上記の日付のみの形式のいずれかに、以下の時刻形式のいずれかを直後に続け、任意でUTCオフセット表現を付加した「日時」形式も含まれます:

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

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

Note 1

すべての日は午前0時で始まり午前0時で終わるため、00:0024:00 の2つの表記は、1つの日付に関連付けられる2つの午前0時を区別するために利用できます。これは、次の2つの表記がまったく同じ時点を指すことを意味します:1995-02-04T24:001995-02-05T00:00。後者の形式を「暦日の終わり」と解釈することはISO 8601と整合しますが、同仕様はこれを時間間隔の記述用に予約しており、単一時点の表現内では許可していません。

Note 2

CET、ESTなどの民用時間帯の略称を規定する国際標準は存在せず、同じ略称が非常に異なる2つの時間帯に使用されることさえあります。このため、ISO 8601およびこの形式はいずれも、時間帯オフセットの数値表現を指定しています。

21.4.1.32.1 拡張年

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

Note

拡張年を持つdate-time値の例:

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

21.4.1.33 時間帯オフセット文字列形式

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

構文

UTCOffset ::: ASCIISign Hour ASCIISign Hour HourSubcomponents[+Extended] ASCIISign Hour HourSubcomponents[~Extended] ASCIISign ::: one of + - Hour ::: 0 DecimalDigit 1 DecimalDigit 20 21 22 23 HourSubcomponents[Extended] ::: TimeSeparator[?Extended] MinuteSecond TimeSeparator[?Extended] MinuteSecond TimeSeparator[?Extended] MinuteSecond 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. parseResultParseText(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 整数. 返り値は、String offsetString に対応するUTCオフセットをナノ秒数として表したものです。 It performs the following steps when called:

  1. parseResultParseText(offsetString, UTCOffset) とする。
  2. Assert: parseResult はエラーのListではない。
  3. Assert: parseResultASCIISign Parse Node を含む。
  4. parsedSign を、parseResult 内に含まれる ASCIISign Parse Node に一致したソーステキストとする。
  5. parsedSign が単一のコードポイント U+002D (HYPHEN-MINUS) である場合、次を行う:
    1. sign を -1 とする。
  6. それ以外の場合、
    1. sign を 1 とする。
  7. NOTE: 以下のStringToNumberの適用は精度を失わない。解析された各値は十分に短い10進数字列であることが保証されているためである。
  8. Assert: parseResultHour Parse Node を含む。
  9. parsedHours を、parseResult 内に含まれる Hour Parse Node に一致したソーステキストとする。
  10. hours(StringToNumber(CodePointsToString(parsedHours))) とする。
  11. parseResultMinuteSecond 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. parseResultTemporalDecimalFraction Parse Node を含まない場合、次を行う:
    1. nanoseconds を 0 とする。
  16. それ以外の場合、
    1. parsedFraction を、parseResult 内に含まれる TemporalDecimalFraction Parse Node に一致したソーステキストとする。
    2. fractionCodePointsToString(parsedFraction) と "000000000" の文字列連結とする。
    3. nanosecondsStringfraction の1から10までの部分文字列とする。
    4. nanoseconds(StringToNumber(nanosecondsString)) とする。
  17. sign × (((hours × 60 + minutes) × 60 + seconds) × 109 + 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. numberOfArgsvalues 内の要素数とする。
  3. numberOfArgs = 0 の場合、次を行う:
    1. dv を現在時刻を識別する時刻値(UTC)とする。
  4. そうでなく numberOfArgs = 1 の場合、次を行う:
    1. valuevalues[0] とする。
    2. value がObjectであり、value[[DateValue]] 内部スロットを持つ場合、次を行う:
      1. tvvalue.[[DateValue]] とする。
    3. それ以外の場合、
      1. v を ? ToPrimitive(value) とする。
      2. v がStringの場合、次を行う:
        1. Assert: v がStringであるため、次のステップは決して中断完了を返さない。
        2. tv を、parseメソッド(21.4.3.2)の場合とまったく同じ方法で、v を日付として解析した結果とする。
      3. それ以外の場合、
        1. tv を ? ToNumber(v) とする。
    4. dvTimeClip(tv) とする。
  5. それ以外の場合、
    1. Assert: 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. obj を ? OrdinaryCreateFromConstructor(NewTarget, "%Date.prototype%", « [[DateValue]] ») とする。
  7. obj.[[DateValue]]dv に設定する。
  8. obj を返す。

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

Dateコンストラクターは以下の通りです:

  • [[Prototype]]内部スロットを持ち、その値は %Function.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の内容に応じて、そのStringはローカル時刻、UTC時刻、または他の時間帯の時刻として解釈される場合があります。この関数はまず、拡張年を含め、Date Time String Format(21.4.1.32)で記述される形式に従ってStringを解析しようとします。Stringがその形式に適合しない場合、この関数は実装固有のヒューリスティックまたは実装固有の日付形式にフォールバックしてもかまいません。認識不能なString、または範囲外の形式要素値を含むStringは、この関数に NaN を返させなければなりません。

Stringが Date Time String Format に適合する場合、欠けている形式要素の代わりに代替値が使用されます。MMまたはDD要素が欠けている場合は、"01" が使用されます。HHmm、または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値を生成することは要求されません。また一般に、この関数が生成する値は、Date Time String Format(21.4.1.32)に適合せず、かつその実装でtoStringまたはtoUTCStringメソッドによって生成され得ない任意のString値が与えられた場合、実装定義です。

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つの点で異なります。Dateを作成するのではなくNumberとして時刻値を返すこと、および引数をローカル時刻ではなく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𝔽 に設定する。そうでない場合、tLocalTime(t) に設定する。
  6. month が存在する場合、m を ? ToNumber(month) とする。そうでない場合、mMonthFromTime(t) とする。
  7. date が存在する場合、dt を ? ToNumber(date) とする。そうでない場合、dtDateFromTime(t) とする。
  8. newDateMakeDate(MakeDay(y, m, dt), TimeWithinDay(t)) とする。
  9. uTimeClip(UTC(newDate)) とする。
  10. dateObject.[[DateValue]]u に設定する。
  11. u を返す。

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

Note

month が存在しない場合、このメソッドは month が値 getMonth() とともに存在したかのように動作します。date が存在しない場合、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 が存在しない場合、このメソッドは min が値 getMinutes() とともに存在したかのように動作します。sec が存在しない場合、sec が値 getSeconds() とともに存在したかのように動作します。ms が存在しない場合、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 が存在しない場合、このメソッドは sec が値 getSeconds() とともに存在したかのように動作します。ms が存在しない場合、これは 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 が存在しない場合、このメソッドは 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 が存在しない場合、このメソッドは 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 が存在する場合、m を ? ToNumber(month) とする。そうでない場合、mMonthFromTime(t) とする。
  7. date が存在する場合、dt を ? ToNumber(date) とする。そうでない場合、dtDateFromTime(t) とする。
  8. newDateMakeDate(MakeDay(y, m, dt), TimeWithinDay(t)) とする。
  9. vTimeClip(newDate) とする。
  10. dateObject.[[DateValue]]v に設定する。
  11. v を返す。

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

Note

month が存在しない場合、このメソッドは month が値 getUTCMonth() とともに存在したかのように動作します。date が存在しない場合、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 が存在しない場合、このメソッドは min が値 getUTCMinutes() とともに存在したかのように動作します。sec が存在しない場合、sec が値 getUTCSeconds() とともに存在したかのように動作します。ms が存在しない場合、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 が存在しない場合、このメソッドは sec が値 getUTCSeconds() とともに存在したかのように動作します。ms が存在しない場合、msgetUTCMilliseconds()によって返される値とともに存在したかのように動作します。

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 が存在しない場合、このメソッドは 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 が存在しない場合、このメソッドは 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. Assert: tv は整数Numberである。
  6. tvDate Time String Format で表現できない年に対応する場合、RangeError 例外をスローする。
  7. UTC時間スケール上で、すべての形式要素およびUTCオフセット表現 "Z" を含む、Date Time String Format における tv のString表現を返す。

21.4.4.37 Date.prototype.toJSON ( key )

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

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

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

引数は無視されます。

Note 2

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

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

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

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

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

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

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

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

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

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

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

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

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

21.4.4.41 Date.prototype.toString ( )

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

  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 (Number、ただし NaN ではない) and returns 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(SPACE)、および "GMT" の文字列連結を返す。

21.4.4.41.2 DateString ( tv )

The abstract operation DateString takes argument tv (Number、ただし NaN ではない) and returns String. It performs the following steps when called:

  1. weekday を、Number WeekDay(tv) を持つ Table 60 内のエントリのNameとする。
  2. month を、Number MonthFromTime(tv) を持つ Table 61 内のエントリのNameとする。
  3. dayToZeroPaddedDecimalString((DateFromTime(tv)), 2) とする。
  4. yvYearFromTime(tv) とする。
  5. yv+0𝔽 であるか、または yv > +0𝔽 の場合、yearSign を空のStringとする。そうでない場合、yearSign"-" とする。
  6. paddedYearToZeroPaddedDecimalString(abs((yv)), 4) とする。
  7. weekday、コード単位0x0020(SPACE)、month、コード単位0x0020(SPACE)、day、コード単位0x0020(SPACE)、yearSign、および paddedYear の文字列連結を返す。
Table 60: 曜日名
Number Name
+0𝔽 "Sun"
1𝔽 "Mon"
2𝔽 "Tue"
3𝔽 "Wed"
4𝔽 "Thu"
5𝔽 "Fri"
6𝔽 "Sat"
Table 61: 年の月名
Number Name
+0𝔽 "Jan"
1𝔽 "Feb"
2𝔽 "Mar"
3𝔽 "Apr"
4𝔽 "May"
5𝔽 "Jun"
6𝔽 "Jul"
7𝔽 "Aug"
8𝔽 "Sep"
9𝔽 "Oct"
10𝔽 "Nov"
11𝔽 "Dec"

21.4.4.41.3 TimeZoneString ( tv )

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

  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 を、空のString、またはコード単位0x0020(SPACE)、コード単位0x0028(LEFT PARENTHESIS)、実装定義の時間帯名、およびコード単位0x0029(RIGHT PARENTHESIS)の文字列連結のいずれかである実装定義の文字列とする。
  10. offsetSignoffsetHouroffsetMin、および tzName の文字列連結を返す。

21.4.4.41.4 ToDateString ( tv )

The abstract operation ToDateString takes argument tv (整数Numberまたは NaN) and returns String. It performs the following steps when called:

  1. tvNaN の場合、"Invalid Date" を返す。
  2. tLocalTime(tv) とする。
  3. DateString(t)、コード単位0x0020(SPACE)、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値に対応する時点を表すString値を返します。Stringの形式は、RFC 7231の"HTTP-date"に基づいており、ECMAScript Datesによってサポートされる時刻の全範囲をサポートするように一般化されています。

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

  1. dateObjectthis値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tvdateObject.[[DateValue]] とする。
  4. tvNaN の場合、"Invalid Date" を返す。
  5. weekday を、Number WeekDay(tv) を持つ Table 60 内のエントリのNameとする。
  6. month を、Number MonthFromTime(tv) を持つ Table 61 内のエントリのNameとする。
  7. dayToZeroPaddedDecimalString((DateFromTime(tv)), 2) とする。
  8. yvYearFromTime(tv) とする。
  9. yv+0𝔽 であるか、または yv > +0𝔽 の場合、yearSign を空のStringとする。そうでない場合、yearSign"-" とする。
  10. paddedYearToZeroPaddedDecimalString(abs((yv)), 4) とする。
  11. weekday","、コード単位0x0020(SPACE)、day、コード単位0x0020(SPACE)、month、コード単位0x0020(SPACE)、yearSignpaddedYear、コード単位0x0020(SPACE)、および 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 )

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

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

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

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

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

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

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