このページはECMAScript® 2020 Language Specification20 Numbers and Dates章をJavaScriptの学習目的で私的に日本語訳したものであり、直訳と意訳および推測が混在しています。そのため内容については正確ではない可能性があります。正確な情報を知りたい場合は、原文をご覧ください。また一部訳者によるコメントが含まれていることがあります。※このサイトの内容で損害や不利益を受けたとしても当方は一切の責任を負いません。

20.1 Numberオブジェクト(Number Objects)

20.1.1 Numberコンストラクター(The Number Constructor)

Numberコンストラクターは、次のような特徴があります。

  • 組み込みオブジェクト%Number%です。
  • グローバルオブジェクト"Number"プロパティの初期値です。
  • コンストラクターとして呼び出されると、新しいNumberオブジェクトを作成して初期化します。
  • 関数として呼び出されると型変換を実行します。
  • サブクラス化できるように設計されています。 クラス定義のextends句の値として使用できます。サブクラスコンストラクターには、[[NumberData]]内部スロットとサブクラスインスタンスを作成および初期化するために、superコールを含める必要があります。

20.1.1.1 Number ( value )

Number が引数 value で呼び出されると、次の手順が実行されます。

  1. value が 存在するなら、
    1. ? ToNumeric(value) を prim とする
    2. Type(prim) が BigInt型 なら、prim数学的数値数値n とする
    3. b. でなければ、 primn とする
  2. 1. と異なるなら、
    1. +0n とする
  3. NewTargetundefined なら、 n を返す
  4. ? OrdinaryCreateFromConstructor(NewTarget, "%Number.prototype%", « [[NumberData]] ») を O とする
  5. nO.[[NumberData]] にセットする
  6. O を返す

20.1.2 Numberコンストラクターのプロパティ(Properties of the Number Constructor)

Numberコンストラクターは、次のような特徴があります。

  • [[Prototype]]内部スロットがあり、値は%Function.prototype%です。
  • 次のプロパティがあります。

20.1.2.1 Number.EPSILON

Number.EPSILONの値は、約2.2204460492503130808472633361816 x 10-16です。
これは、数値として表すことができる、1と1より大きい値の最小値です。

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

20.1.2.2 Number.isFinite ( number )

Number.isFinite が引数 number で呼び出されると、次の手順が実行されます。

  1. Type(number) が Number型 でないなら、 false を返す
  2. numberNaN+∞-∞ のどれかなら、 false を返す
  3. true を返す

20.1.2.3 Number.isInteger ( number )

Number.isInteger が引数 number で呼び出されると、次の手順が実行されます。

  1. ! IsInteger(number) を返す

20.1.2.4 Number.isNaN ( number )

Number.isNaN が引数 number で呼び出されると、次の手順が実行されます。

  1. Type(number) が Number型 でないなら、 false を返す
  2. numberNaN なら、 true を返す
  3. false を返す
この関数は、グローバルisNaN関数(18.2.3)とは異なります。この関数は、NaNであるかどうかを判断する前に引数を数値に変換しません、

20.1.2.5 Number.isSafeInteger ( number )

Number.isSafeInteger が引数 number で呼び出されると、次の手順が実行されます。

  1. ! IsInteger(number) が true なら、
    1. abs(number) ≦ 253 - 1 なら、 true を返す
  2. false を返す

20.1.2.6 Number.MAX_SAFE_INTEGER

Number.MAX_SAFE_INTEGERの値は、n および n + 1 が数値として正確に表現できるような、最大の整数nです。

Number.MAX_SAFE_INTEGER の値は、9007199254740991 (253 - 1) です。

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

20.1.2.7 Number.MAX_VALUE

Number.MAX_VALUE は、Number型の最大値(正の有限値)です。
値は、約1.7976931348623157 × 10308です。

20.1.2.8 Number.MIN_SAFE_INTEGER

Number.MIN_SAFE_INTEGERの値は、n および n - 1 が数値として正確に表現できるような、最小の整数nです。

Number.MIN_SAFE_INTEGERの値は、-9007199254740991 (-(253 - 1)) です。

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

20.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}です。

20.1.2.10 Number.NaN

Number.NaNの値は、NaNです。

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

20.1.2.11 Number.NEGATIVE_INFINITY

Number.NEGATIVE_INFINITYの値は、-∞ です。

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

20.1.2.12 Number.parseFloat ( string )

データプロパティNumber.parseFloatの値は、グローバルオブジェクト"parseFloat"プロパティ(18.2.4)と同じ組み込み関数オブジェクトです。

20.1.2.13 Number.parseInt ( string, radix )

データプロパティNumber.parseIntの値は、グローバルオブジェクト"parseInt"プロパティ(18.2.5)と同じ組み込み関数オブジェクトです。

20.1.2.14 Number.POSITIVE_INFINITY

Number.POSITIVE_INFINITYの値は、+∞ です。

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

20.1.2.15 Number.prototype

Number.prototypeの初期値は%Number.prototype%です。

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

20.1.3 Numberプロトタイプオブジェクトのプロパティ(Properties of the Number Prototype Object)

Numberプロトタイプオブジェクトは、次のような特徴があります。

  • 組み込みオブジェクト%NumberPrototype%です。
  • 通常のオブジェクトです。
  • それ自体がNumberオブジェクトです。 [[NumberData]]内部スロットがあり、値は+0です。
  • [[Prototype]]内部スロットがあり、値は%Object.prototype%です。

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

抽象操作thisNumberValue(value) は、次の手順を実行します。

  1. Type(value) が Number型 なら、 value を返す
  2. Type(value) が Object型で value が [[NumberData]] 内部スロットを持っているなら、
    1. value.[[NumberData]] を n とする
    2. Assert: Type(n) は Number型
    3. n を返す
  3. TypeError例外をスローする

メソッドの仕様内の"thisの数値"という句は、引数として渡されたメソッド呼び出しのthis値を使用して抽象演算thisNumberValueを呼び出すことによって返される結果を指します。

20.1.3.1 Number.prototype.constructor

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

20.1.3.2 Number.prototype.toExponential ( fractionDigits )

仮数の小数点の前に1桁、仮数の小数点の後にfractionDigits桁を含む、10進指数表記のthisの数値を文字列として返します。 fractionDigitsundefinedの場合は、数値を一意に指定するために必要な数の仮数桁を含めます(ToStringの場合と同様ですが、この場合、数値は常に指数表記で出力されます)。 次の手順を実行します。

  1. ? thisNumberValue(this値) を x とする
  2. ? ToInteger(fractionDigits) を f とする
  3. Assert: fractionDigitsundefined なら、 f0
  4. xNaN なら、 文字列 "NaN" を返す
  5. empty String を s とする
  6. x < 0 なら、
    1. "-"s にセットする
    2. -xx にセットする
  7. x = +∞ なら、
    1. s"Infinity" の文字列連結を返す
  8. f < 0 か f > 100 なら RangeError例外をスローする
  9. x = 0 なら、
    1. コードユニット 0x0030 (DIGIT ZERO) を f + 1 回繰り返した文字列を m とする
    2. 0e とする
  10. 9. と異なるなら、
    1. fractionDigitsundefined でないなら、
      1. 10fn < 10f + 1で、(n) × 10(e)-(n)-(x)が可能な限りゼロに近い整数となる、enを求める。 enの組が2つあるなら、(n) × 10(e)-(f)の結果が大きい方を選択する。
    2. a. と異なるなら、
      1. f ≧ 0 、 10fn < 10f + 1 で、(n) × 10(e) - (f)の数値が x と等しく、fができる限り小さいときの、enfを求める。
        注:nの10進表現はf + 1桁。n は 10で割り切れない。nの最下位桁は必ずしもこれらの基準によって一意に決定されるとは限らない。
    3. n の10進数文字列値(先行ゼロなし)を m とする
  11. f ≠ 0 なら、
    1. m の最初のコードユニットを am の残りから f 個のコードユニットを b する
    2. a"."b の文字列連結を m にセットする
  12. e = 0 なら、
    1. "+"c とする
    2. "0"d とする
  13. 12. と異なるなら、
    1. e > 0 なら "+"c とする
    2. a. と異なるなら、
      1. Assert: e < 0
      2. "-"c とする
      3. -ee にセットする
    3. e の10進数文字列値(先行ゼロなし)を d とする
  14. m"e"cd の文字列連結を m にセットする
  15. sm の文字列連結を返す

上記のルールよりも正確な変換をおこなう実装の場合、ステップ10.b.iで次の代替バージョンをガイドラインとして使用することをお勧めします。

10.b.i:

f ≧ 0 、 10fn < 10f + 1 で、(n) × 10(e) - (f)の数値が x と等しく、fができる限り小さいときの、enfを求める。n に複数の可能性がある場合は、(n) × 10(e)-(f)の値がxに最も近くなる値を選択する。 nのそのような値が2つある場合は、偶数の値を選択する。

20.1.3.3 Number.prototype.toFixed ( fractionDigits )

toFixedは、小数点の後にfractionDigits桁を含む、10進固定小数点表記のthisの数値を含む文字列を返します。 fractionDigitsundefinedの場合、0とみなします。

次の手順が実行されます

  1. ? thisNumberValue(this値) を x とする
  2. ? ToInteger(fractionDigits) を f とする
  3. Assert: fractionDigitsundefined なら、 f は 0
  4. f < 0 か f > 100 なら RangeError例外をスローする
  5. xNaN なら、 文字列 "NaN" を返す
  6. empty String を s とする
  7. x < 0 なら、
    1. "-"s にセットする
    2. -xx にセットする
  8. x ≧ 1021 なら、
    1. ! ToString(x) を m とする
  9. 8. と異なるなら、
    1. (n) ÷ 10(f) - (x) が可能な限りゼロに近い整数となる n を求める。 nが2つある場合は、大きい方を選択する。
    2. f ≠ 0 なら、
      1. m の長さを k とする
      2. kf なら、
        1. コードユニット0x0030(DIGIT ZERO)を f + 1 - k 回繰り返した文字列値を z とする
        2. zm の文字列連結を m にセットする
        3. f + 1 を k にセットする
      3. mの先頭から k - f までのコードユニットと a をし、mの残りから f 個のコードユニットとを b とする。
      4. a"."b の文字列連結を m にセットする
  10. sm の文字列連結を返す

toStringは、数値を隣接する数値と区別するのに十分な有効数字のみを出力します。そのため、一部の値は、toFixedの方が正確な場合があります。

例:

(1000000000000000128).toString() は "1000000000000000100" を返す
(1000000000000000128).toFixed(0) は "1000000000000000128" を返す

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

ECMA-402 Internationalization APIを含むECMAScript実装は、ECMA-402仕様で指定されているようにNumber.prototype.toLocaleStringメソッドを実装する必要があります。 ECMAScript実装にECMA-402APIが含まれていない場合は、toLocaleStringメソッドは次の仕様が使用されます。

ホスト環境の現在のロケールの規則に従ってthisの数値を文字列値にフォーマットします。 この関数は実装に依存しており、toStringと同じものを返すことは許可されていますが、推奨されていません。

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

20.1.3.5 Number.prototype.toPrecision ( precision )

仮数の小数点の前に1桁、仮数の小数点の後にprecision - 1 桁を含む10進指数表記、またはprecision有効数字を含む10進固定表記のいずれかで表される、thisの数値の文字列を返します。 precisionが定義されていない場合は、代わりにToStringを呼び出します。 具体的には、次の手順を実行します。

  1. ? thisNumberValue(this値) を x とする
  2. precisionundefined なら、 ! ToString(x) を返す
  3. ? ToInteger(precision) を p とする
  4. xNaN なら、 文字列 "NaN" を返す
  5. empty String を s とする
  6. If x < 0 なら、
    1. コードユニット 0x002D (HYPHEN-MINUS) を s にセットする
    2. -xx にセットする
  7. x = +∞ なら、
    1. s"Infinity" の文字列連結を返す
  8. p < 1 または p > 100 なら RangeError例外をスローする
  9. x = 0 なら、
    1. コードユニット 0x0030 (DIGIT ZERO) を p 回繰り返した文字列を m とする
    2. 0 を e とする
  10. 9. と異なるなら、
    1. 10p -1n < 10p と、(n) × 10(e) - (p) + 1 - (x)が可能な限りゼロに近い整数、がなりたつ en を求める。eとnの組が2つある場合は、(n) × 10(e) - (p) + 1 が一番大きくなるeとnを選択する。
    2. n の10進文字列値(先行ゼロなし)を m とする
    3. e < -6 か ep なら、
      1. Assert: e ≠ 0
      2. p ≠ 1 なら、
        1. m の最初のコードユニットを am の残りから p - 1コードユニットを b とする。
        2. a"."b の文字列連結を m とする
      3. e > 0 なら、
        1. コードユニット 0x002B (PLUS SIGN) を c とする
      4. iii. と異なるなら、
        1. Assert: e < 0
        2. コードユニット 0x002D (HYPHEN-MINUS) を c とする
        3. -ee にセットする
      5. e の10進文字列値(先行ゼロなし)を d とする
      6. sm と コードユニット 0x0065 (LATIN SMALL LETTER E) と cd の文字列連結を返す
  11. e = p - 1 なら sm の文字列連結を返す
  12. e ≧ 0 なら、
    1. m の最初の e + 1 コードユニット と コードユニット 0x002E (FULL STOP) と m の残りの p - (e + 1) コードユニットとの文字列連結を m にセットする
  13. 12. と異なるなら、
    1. コードユニット 0x0030 (DIGIT ZERO) と コードユニット 0x002E (FULL STOP) と コードユニット 0x0030 (DIGIT ZERO) の -(e + 1) 回の繰り返しと m との文字列連結を m にセットする
  14. sm の文字列連結を返す

20.1.3.6 Number.prototype.toString ( [ radix ] )

radixは、2から36の範囲の整数値です。radixが定義されていない場合は、数値10が使用されます。

次の手順が実行されます

  1. ? thisNumberValue(this値) を x とする
  2. radixundefined なら、 10 を radixNumber とする
  3. 2. と異なるなら、 ? ToInteger(radix) を radixNumber とする
  4. If radixNumber < 2 または radixNumber > 36 なら RangeError例外をスローする
  5. radixNumber = 10 なら ! ToString(x) を返す
  6. 基数radixNumberで、thisの数値の文字列表現を返す。 文字aからzは、値が10から35の数字に使用する。正確なアルゴリズムは実装によって異なるが、アルゴリズムは6.1.6.1.20を一般化したものとする。

toString関数は汎用的ではありません。 this値がNumberまたはNumberオブジェクトでない場合、TypeError例外をスローします。 したがって、他の種類のオブジェクトでこのメソッドは使用できません。

toStringメソッドの"length"プロパティは1です。

20.1.3.7 Number.prototype.valueOf ( )

  1. ? thisNumberValue(this値) を返す

20.1.4 Numberインスタンスのプロパティ(Properties of Number Instances)

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

20.2 BigIntオブジェクト(BigInt Objects)

20.2.1 BigIntコンストラクター(The BigInt Constructor)

BigIntコンストラクターは、次のような特徴があります。

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

20.2.1.1 BigInt ( value )

BigInt が引数 value で呼び出されると、次の手順が実行されます。

  1. NewTargetundefined でないなら、TypeError例外をスローする
  2. ? ToPrimitive(value, hint Number) を prim とする
  3. Type(prim) が Number型 なら、 ? NumberToBigInt(prim) を返す
  4. ? ToBigInt(value) を返す
20.2.1.1.1 ランタイムセマンティクス(Runtime Semantics): NumberToBigInt ( number )
  1. Assert: Type(number) は Number型
  2. IsInteger(number) が false なら、RangeError例外をスローする
  3. number数学的数値をあらわすBigInt値を返す

20.2.2 BigIntコンストラクターのプロパティ(Properties of the BigInt Constructor)

BigInコンストラクターの[[Prototype]]内部スロットの値は、組み込みオブジェクト%Function.prototype%です。

BigIntコンストラクターには、次のプロパティがあります。

20.2.2.1 BigInt.asIntN ( bits, bigint )

BigInt.asIntN 関数が引数 bitsbigint で呼び出されると、次の手順が実行されます。

  1. ? ToIndex(bits) を bits にセットする
  2. ? ToBigInt(bigint) を bigint にセットする
  3. bigint modulo 2bits のBigInt値を mod とする
  4. mod ≧ 2bits - 1 なら mod - 2bits を、異なるなら mod を返す

20.2.2.2 BigInt.asUintN ( bits, bigint )

BigInt.asUintN 関数が引数 bitsbigint で呼び出されると、次の手順が実行されます。

  1. ? ToIndex(bits) を bits にセットする
  2. ? ToBigInt(bigint) を bigint にセットする
  3. bigint modulo 2bits のBigInt値を返す

20.2.2.3 BigInt.prototype

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

20.2.3 BigIntプロトタイプオブジェクトのプロパティ(Properties of the BigInt Prototype Object)

BigIntプロトタイプオブジェクトは、次のような特徴があります。

  • 通常のオブジェクトです。
  • BigIntオブジェクトではありません。 [[BigIntData]]内部スロットはありません。
  • [[Prototype]]内部スロットがあり、その値は組み込みオブジェクト%Object.prototype%です。

抽象操作thisBigIntValue(value)は、次の手順を実行します。

  1. Type(value) が BigInt型 なら、 value を返す
  2. Type(value) が Object型 で value が [[BigIntData]] 内部スロットを持っているなら、
    1. Assert: Type(value.[[BigIntData]]) は BigInt型
    2. value.[[BigIntData]] を返す
  3. TypeError例外をスローする

メソッドの仕様内の「thisのBigInt値」という句は、メソッド呼び出しのthis値を使用して抽象操作thisBigIntValueが返す結果を指します。

20.2.3.1 BigInt.prototype.constructor

BigInt.prototype.constructorの初期値は、組み込みオブジェクト%BigInt%です。

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

ECMA-402 Internationalization APIを含むECMAScript実装は、ECMA-402仕様で指定されているBigInt.prototype.toLocaleStringメソッドを実装する必要があります。 ECMAScript実装にECMA-402APIが含まれていない場合は、toLocaleStringメソッドの次の仕様が使用されます。

ホスト環境の現在のロケールの規則に従ってthisのBigInt値を表す文字列値をフォーマットします。 この関数は実装に依存しており、toStringと同じものを返すことは許可されていますが、推奨されていません。

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

20.2.3.3 BigInt.prototype.toString ( [ radix ] )

オプション radixは、2から36の範囲の整数値です。 radixが存在しないかundefinedの場合、数値10が使用されます。

次の手順が実行されます。

  1. ? thisBigIntValue(this値) を x とする
  2. radix が存在しないなら、 10 を radixNumber とする
  3. 2. と異なるなり radixundefined なら 10 を radixNumber とする
  4. 3. と異なるなら、 ? ToInteger(radix) を radixNumber とする
  5. radixNumber < 2 または radixNumber > 36 なら RangeError例外をスローする
  6. radixNumber = 10 なら ! ToString(x) を返す
  7. 基数radixNumberで、thisの数値の文字列表現を返す。 文字aからzは、値が10から35の数字に使用される。正確なアルゴリズムは実装によって異なるが、アルゴリズムは6.1.6.2.23を一般化したものを使用する。

toString関数は汎用的ではありません。 this値がBigIntまたはBigIntオブジェクトでない場合、TypeError例外をスローします。 したがって、他の種類のオブジェクトでこのメソッドは使用できません。

20.2.3.4 BigInt.prototype.valueOf ( )

  1. ? thisBigIntValue(this値) を返す

20.2.3.5 BigInt.prototype [ @@toStringTag ]

@@toStringTagプロパティの初期値は、文字列値"BigInt"です。

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

20.3 Mathオブジェクト(The Math Object)

Mathオブジェクトは、次のような特徴があります。

  • 組み込みオブジェクト%Math%です。
  • グローバルオブジェクト"Math"プロパティの初期値です。
  • 通常のオブジェクトです。
  • [[Prototype]]内部スロットがあり、値は%Object.prototype%です。
  • 関数オブジェクトではありません。
  • [[Construct]]内部メソッドがありません。 したがって、new演算子のコンストラクターとして使用することはできません。
  • [[Call]]内部メソッドはありません。 したがって、関数として呼び出すことはできません。
この仕様では、「xの数値」という句は、6.1.6.1で定義されている技術的な意味を持っています。

20.3.1 Mathオブジェクトの値プロパティ(Value Properties of the Math Object)

20.3.1.1 Math.E

自然対数の底であるeの数値。約2.7182818284590452354。

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

20.3.1.2 Math.LN10

10の自然対数の数値。約2.302585092994046。

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

20.3.1.3 Math.LN2

2の自然対数の数値。約0.6931471805599453。

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

20.3.1.4 Math.LOG10E

自然対数の底であるeの10を底とする対数の数値。 約0.4342944819032518。

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

Math.LOG10Eの値は、Math.LN10の値のほぼ逆数です。

20.3.1.5 Math.LOG2E

自然対数の底であるeの2を底とする対数の数値。 約1.4426950408889634。

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

Math.LOG2Eの値は、Math.LN2の値のほぼ逆数です。

20.3.1.6 Math.PI

円の円周と直径の比率であるπの数値。約3.1415926535897932。

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

20.3.1.7 Math.SQRT1_2

½の平方根の数値。約0.7071067811865476。

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

Math.SQRT1_2の値は、Math.SQRT2の値のほぼ逆数です。

20.3.1.8 Math.SQRT2

2の平方根の数値。約1.4142135623730951。

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

20.3.1.9 Math [ @@toStringTag ]

@@toStringTagプロパティの初期値は、文字列値"Math"です。

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

20.3.2 Mathオブジェクトの関数プロパティ(Function Properties of the Math Object)

次の各Mathオブジェクト関数は、各引数に左から右の順序でToNumber抽象演算を適用します。 ToNumberが突然の完了を返す場合、その時点でその完了レコード が返されます。 それ以外の場合、関数は計算を実行します。 各関数によって返される値は数値です。

以下の関数の説明では、記号NaN-0+0-∞+∞6.1.6.1で説明されている数値を参照しています。

対象の境界ケースを表す特定の引数値に対して特定の結果を要求する場合を除いて、関数acos、acosh、asin、asinh、atan、atanh、atan2、cbrt、cos、cosh、exp、expm1、hypot、log、log1p、log2、log10、pow、random、sin、sinh、sqrt、tan、およびtanhの正確な動作は、ここでは指定されていません。他の引数値の場合、これらの関数は、使い慣れた数学関数の結果の近似を計算することを目的としていますが、近似アルゴリズムの選択にはある程度の許容範囲があります。一般的な目的は、実装者が、特定のハードウェアプラットフォームでECMAScriptに同じ数学ライブラリを使用できるようにすることです。このライブラリは、そのプラットフォームのCプログラマーが利用できます。

アルゴリズムの選択は実装に任されていますが、実装では、Sun Microsystems(http://www.netlib.org/fdlibm)から自由に配布できる数学ライブラリfdlibmに含まれるIEEE754-2019演算の近似アルゴリズムを使用することをお勧めします(ただし、この標準では指定されていません)。

20.3.2.1 Math.abs ( x )

xの絶対値を返します。 結果の大きさはxと同じですが、符号は正です。

  • xNaN なら、結果は NaN
  • x-0 なら、結果は +0
  • x-∞ なら、結果は +∞

20.3.2.2 Math.acos ( x )

xのアークコサインの実装に依存する近似を返します。 結果はラジアンで表され、+0からの範囲です。

  • xNaN なら、結果は NaN
  • x が greater than 1 なら、結果は NaN
  • If x が less than -1 なら、結果は NaN
  • If x が exactly 1 なら、結果は +0

20.3.2.3 Math.acosh ( x )

xの逆双曲線余弦の実装依存近似を返します。

  • xNaN なら、結果は NaN
  • x1 未満なら、結果は NaN
  • x1 なら、結果は +0
  • x+∞ なら、結果は +∞

20.3.2.4 Math.asin ( x )

xのアークサインの実装に依存する近似を返します。 結果はラジアンで表され、範囲は-π/2から+π/ 2です。

  • xNaN なら、結果は NaN
  • x が 1 より大きいなら、結果は NaN
  • x が -1 未満なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0

20.3.2.5 Math.asinh ( x )

xの逆双曲線正弦の実装依存近似を返します。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ なら、結果は +∞
  • x が -∞ なら、結果は -∞

20.3.2.6 Math.atan ( x )

xのアークタンジェントの実装に依存する近似を返します。 結果はラジアンで表され、範囲は-π/ 2から+π/ 2です。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ なら、結果は +π/2 (実装依存の近似)
  • x-∞ なら、結果は -π/2 (実装依存の近似)

20.3.2.7 Math.atanh ( x )

xの逆双曲線正接に対する実装依存の近似を返します。

  • xNaN なら、結果は NaN
  • x が -1 未満なら、結果は NaN
  • x が 1 より大きいなら、結果は NaN
  • x が -1 なら、結果は -∞
  • x が +1 なら、結果は +∞
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0

20.3.2.8 Math.atan2 ( y, x )

y/xのアークタンジェントに対する実装依存の近似を返します。yxの符号は、結果の象限を決定するために使用されます。 2つの引数のアークタンジェント関数の引数は、伝統的にyxと並ぶため、これは意図的です。 結果はラジアンで表され、範囲は-πから+πです。

  • xyNaN なら、結果は NaN
  • y > 0 で x+0 なら、結果は +π / 2(実装依存の近似)
  • y > 0 で x-0 なら、結果は +π / 2 (実装依存の近似)
  • y+0x > 0 なら、結果は +0
  • y+0x+0 なら、結果は +0
  • y+0x-0 なら、結果は (実装依存の近似)
  • y+0x < 0 なら、結果は (実装依存の近似)
  • y-0x > 0 なら、結果は -0
  • y-0x+0 なら、結果は -0
  • y-0x-0 なら、結果は (実装依存の近似)
  • y-0x < 0 なら、結果は (実装依存の近似)
  • y < 0 で x+0 なら、結果は -π / 2 (実装依存の近似)
  • y < 0 で x-0 なら、結果は -π / 2 (実装依存の近似)
  • y > 0 で y が有限で x+∞ なら、結果は +0
  • y > 0 で y が有限で x-∞ なら、結果は (実装依存の近似)
  • y < 0 で y が有限で x+∞ なら、結果は -0
  • y < 0 で y が有限で x-∞ なら、結果は (実装依存の近似)
  • y+∞x が有限なら、結果は +π / 2 (実装依存の近似)
  • y-∞x が有限なら、結果は -π / 2 (実装依存の近似)
  • y+∞x+∞ なら、結果は の +π / 4 (実装依存の近似)
  • y+∞x-∞ なら、結果は +3π / 4 (実装依存の近似)
  • y-∞x+∞ なら、結果は -π / 4 (実装依存の近似)
  • y-∞x-∞ なら、結果は -3π / 4 (実装依存の近似)

20.3.2.9 Math.cbrt ( x )

xの立方根に対する実装依存の近似を返します。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ なら、結果は +∞
  • x-∞ なら、結果は -∞

20.3.2.10 Math.ceil ( x )

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

  • xNaN なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ なら、結果は +∞
  • x-∞ なら、結果は -∞
  • x が 0 未満で -1 より大きいなら、結果は -0

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

20.3.2.11 Math.clz32 ( x )

Math.clz32 が引数 x で呼び出されると、次の手順が実行されます。

  1. ? ToUint32(x) を n とする
  2. n の32ビットバイナリ表現で、先頭からのゼロビットの数を p とする
  3. p を返す
nが0の場合、pは32になります。nの32ビットバイナリエンコーディングの最上位ビットが1の場合、pは0になります。

20.3.2.12 Math.cos ( x )

xのコサインの実装に依存する近似を返します。 引数はラジアンで表されます。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は 1
  • x-0 なら、結果は 1
  • x+∞ なら、結果は NaN
  • x-∞ なら、結果は NaN

20.3.2.13 Math.cosh ( x )

xの双曲線余弦の実装依存近似を返します。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は 1
  • x-0 なら、結果は 1
  • x+∞ なら、結果は +∞
  • x-∞ なら、結果は +∞
Math.cosh(x)の値は、(Math.exp(x) + Math.exp(-x)) / 2 の値と同じです。

20.3.2.14 Math.exp ( x )

xの指数関数の実装に依存する近似を返します(自然対数の底exの累乗になります)。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は 1
  • x-0 なら、結果は 1
  • x+∞ なら、結果は +∞
  • x-∞ なら、結果は +0

20.3.2.15 Math.expm1 ( x )

xの指数関数から1を引くための実装依存の近似を返します(自然対数の底exの累乗になります)。 結果は、xの値が0に近い場合でも正確な方法で計算されます。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ なら、結果は +∞
  • x-∞ なら、結果は -1

20.3.2.16 Math.floor ( x )

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

  • xNaN なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ なら、結果は +∞
  • x-∞ なら、結果は -∞
  • x が 0 より大きく 1 より小さいなら、結果は +0
Math.floor(x) の値は、-Math.ceil(-x) の値と同じです。

20.3.2.17 Math.fround ( x )

Math.fround が引数 x で呼び出されると、次の手順が実行されます。

  1. xNaN なら、 NaN を返す
  2. x+0-0+∞, -∞ のどれかなら、x を返す
  3. x をroundTiesToEvenモードでIEEE 754-2019binary32形式の値に変換した結果を x32 とする
  4. x32 をIEEE754-2019binary64形式の値に変換した結果を x64 とする
  5. x64 に対応する ECMAScript 数値 を返す

20.3.2.18 Math.hypot ( value1, value2, ...values )

Math.hypotは、二乗和の平方根の実装に依存する近似を返します。

  • 引数なしなら、結果は +0
  • 引数のどれかが +∞ なら、結果は +∞
  • 引数のどれかが -∞ なら、結果は +∞
  • 引数に +∞-∞ がなく、 引数のどれかが NaN なら、結果は NaN
  • すべての引数が +0 または -0 なら、結果は +0
実装は、この関数が2つ以上の引数で呼び出されたときに、オーバーフローとアンダーフローによる精度の低下を回避するように注意する必要があります。

20.3.2.19 Math.imul ( x, y )

Math.imulが引数xおよびyで呼び出されると、次の手順が実行されます。

  1. ? ToUint32(x) を a とする
  2. ? ToUint32(y) を b とする
  3. (a × b) modulo 232product とする
  4. product ≧ 231 なら product - 232 を、 異なるなら product を返す

20.3.2.20 Math.log ( x )

xの自然対数に対する実装依存の近似を返します。

  • xNaN なら、結果は NaN
  • x が 0 未満なら、結果は NaN
  • x+0-0 なら、結果は -∞
  • x が 1 なら、結果は +0
  • x+∞ なら、結果は +∞

20.3.2.21 Math.log1p ( x )

1 + xの自然対数に対する実装依存の近似を返します。 結果は、xの値がゼロに近い場合でも正確な方法で計算されます。

  • xNaN なら、結果は NaN
  • x が -1 未満なら、結果は NaN
  • x が -1 なら、結果は -∞
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ なら、結果は +∞

20.3.2.22 Math.log10 ( x )

xの常用対数の実装に依存する近似を返します。

  • xNaN なら、結果は NaN
  • x が 0 未満なら、結果は NaN
  • x+0 なら、結果は -∞
  • x-0 なら、結果は -∞
  • x が 1 なら、結果は +0
  • x+∞ なら、結果は +∞

20.3.2.23 Math.log2 ( x )

xの2を底とする対数の実装に依存する近似を返します。

  • xNaN なら、結果は NaN
  • x が 0 未満なら、結果は NaN
  • x+0 なら、結果は -∞
  • x-0 なら、結果は -∞
  • x が 1 なら、結果は +0
  • x+∞ なら、結果は +∞

20.3.2.24 Math.max ( value1, value2, ...values )

引数が0個以上の場合、各引数でToNumberを呼び出し、結果の値の最大値を返します。

  • 引数なしなら、結果は -∞
  • 引数のどれかが NaN なら、結果は NaN
  • 値の比較は、抽象関係比較 アルゴリズムを使用して行う。ただし、+0-0より大きいとする

20.3.2.25 Math.min ( value1, value2, ...values )

引数が0個以上の場合、各引数でToNumberを呼び出し、結果の値の最小値を返します。

  • 引数なしなら、結果は +∞.
  • 引数のどれかが NaN なら、結果は NaN
  • の比較は、抽象関係比較 アルゴリズムを使用して行う。ただし、+0-0より大きいとする

20.3.2.26 Math.pow ( base, exponent )

  1. ? ToNumber(base) を base にセットする
  2. ? ToNumber(exponent) を exponent にセットする
  3. ! Number::exponentiate(base, exponent) を返す

20.3.2.27 Math.random ( )

実装に依存するアルゴリズム等を使用して、ランダムまたは範囲全体にほぼ均一に分布する疑似ランダムにより選択された、0以上1未満の正符号の数値を返します。 この関数は引数を取りません。

個別のレルム用に作成された各Math.random関数は、連続する呼び出しから個別の値のシーケンスを生成する必要があります。

20.3.2.28 Math.round ( x )

xに最も近い、整数値を返します。 2つの整数がxに近い場合、結果は+∞に近い数値になります。 xがすでに整数の場合、結果はxになります。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ なら、結果は +∞
  • x-∞ なら、結果は -∞
  • x が 0 より大きく 0.5 より小さいなら、結果は +0
  • x が 0 より小さく -0.5 以上なら、結果は -0
Math.round(3.5)は4を返し、Math.round(-3.5)は-3を返します。
Math.round(x)の値は、Math.floor(x + 0.5)の値と常に同じであるとは限りません。 xが-0または0未満で-0.5以上の場合、 Math.round(x)は-0を返します。一方、Math.floor(x + 0.5)は+0を返します。 Math.round(x)は、x + 0.5を計算する際の内部丸めのため、Math.floor(x + 0.5)の値とも異なる場合があります。

20.3.2.29 Math.sign ( x )

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

  • xNaN なら、結果は NaN
  • x-0 なら、結果は -0
  • x+0 なら、結果は +0
  • x が負で -0 でないなら、結果は -1
  • x が正で +0 でないなら、結果は +1

20.3.2.30 Math.sin ( x )

xの正弦に対する実装依存の近似を返します。 引数はラジアンで表されます。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ または -∞ なら、結果は NaN

20.3.2.31 Math.sinh ( x )

xの双曲線正弦の実装依存近似を返します。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ なら、結果は +∞
  • x-∞ なら、結果は -∞
Math.sinh(x)の値は、(Math.exp(x) - Math.exp(-x)) / 2の値と同じです。

20.3.2.32 Math.sqrt ( x )

xの平方根の実装に依存する近似を返します。

  • xNaN なら、結果は NaN
  • x が 0 未満なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ なら、結果は +∞

20.3.2.33 Math.tan ( x )

xの接線に対する実装依存の近似を返します。 引数はラジアンで表されます。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ または -∞ なら、結果は NaN

20.3.2.34 Math.tanh ( x )

xの双曲線正接に対する実装依存の近似を返します。

  • xNaN なら、結果は NaN
  • x+0 なら、結果は +0
  • x-0 なら、結果は -0
  • x+∞ なら、結果は +1
  • x-∞ なら、結果は -1
Math.tanh(x)の値は、(Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x)) の値と同じです。

20.3.2.35 Math.trunc ( x )

数値xの整数部分を返し、小数桁を削除します。 xがすでに整数の場合、結果はxになります。

  • xNaN なら、結果は NaN
  • x-0 なら、結果は -0
  • x+0 なら、結果は +0
  • x+∞ なら、結果は +∞
  • x-∞ なら、結果は -∞
  • x が 0 より大きく 1 より小さいなら、結果は +0
  • x が 0 より小さく -1 より大きいなら、結果は -0

20.4 Dateオブジェクト(Date Objects)

20.4.1 日付オブジェクトの概要と抽象演算の定義(Overview of Date Objects and Definitions of Abstract Operations)

以下の関数は、時刻値(20.4.1.1で定義)を操作する抽象演算です。 いずれの場合も、これらの関数のいずれかに対する引数がNaNの場合、結果はNaNになることに注意してください。

20.4.1.1 時刻値と時刻範囲(Time Values and Time Range)

ECMAScriptでの時刻測定は、POSIXでの時刻測定に類似しています。特に、先発グレゴリオ暦、1970年1月1日UTCの初めの真夜中のエポック、および正確に86,400秒で構成される毎日のアカウンティングに関する定義を共有しています( それぞれの長さは1000ミリ秒です)。

ECMAScriptの時刻値は数値です。ミリ秒単位の時刻を表す有限整数、または特定の時刻がないことを表すNaNのいずれかです。 24 × 60 × 60 × 1000 = 86,400,000 の倍数である時刻値(つまり、ある整数dの86,400,000 × d に等しい)は、UTC日の開始時にエポックにd全体のUTC日が続く時刻を表します(負のdのエポックに先行する)。 1つおきの有限時刻値tは、そのような倍数である先行する最大の時刻値sを基準にして定義され、sと同じUTC日内に発生するが、それに続くtsミリ秒の時刻を表します。

時刻値はUTCうるう秒を考慮しません。正のうるう秒内の時刻を表す時刻値はなく、負のうるう秒によってUTCタイムラインから削除された時刻を表す時刻値があります。 ただし、時刻値の定義により、UTCと区分的に整合し、うるう秒の境界でのみ不連続性が生じ、うるう秒以外では差がゼロになります。

数値は、-9,007,199,254,740,992 から 9,007,199,254,740,992(20.1.2.8および20.1.2.6)までのすべての整数を正確に表すことができます。 時刻値は、-8,640,000,000,000,000 から 8,640,000,000,000,000ミリ秒のわずかに狭い範囲をサポートします。 これにより、1970年1月1日UTCの初めの真夜中を基準にして正確に-1億日から1億日までサポートされた時刻値の範囲が得られます。

1970年1月1日UTCの初めの真夜中の正確な時刻は、時刻値+0で表されます。

先発グレゴリオ暦の400年周期には、97のうるう年が含まれています。 これにより、年間平均365.2425日、つまり31,556,952,000ミリ秒が得られます。 したがって、数値がミリ秒の精度で正確に表すことができる最大範囲は、1970年に対して約-285,426 から 285,426年です。このセクションで指定されている時刻値によってサポートされるより小さな範囲は、1970年に対して約-273,790から273,790年です。

20.4.1.2 日番号と日内の時刻(Day Number and Time within Day)

次の式は、時刻値tから、日番号を計算しています。

Day(t) = floor(t / msPerDay)

ここで、1日あたりのミリ秒数msPerDayは次のようになります。

msPerDay = 86400000

剰余した結果は、日の時間です。

TimeWithinDay(t) = t modulo msPerDay

20.4.1.3 年番号(Year Number)

ECMAScriptは先発グレゴリオ暦を使用して日番号を年番号にマップし、その年内の月と日付を決定します。 このカレンダーでは、うるう年は正確に(4で割り切れる)および((100で割り切れない)または(400で割り切れる))である年です。 したがって、年番号yの日数は次のように定義されます。

DaysInYear(y)
= (y modulo 4) ≠ 0 なら 365
= (y modulo 4) = 0 で (y modulo 100) ≠ 0 なら 366
= (y modulo 100) = 0 で (y modulo 400) ≠ 0 なら 365
= (y modulo 400) = 0 なら 366

うるう年以外のすべての年は365日で、うるう年は2月に1日余分にあります。 y年の初日の日番号は次の式で計算できます。

DayFromYear(y)
= 365 × (y - 1970) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400)

年の初めの時刻値は次の式で計算できます。

TimeFromYear(y) = msPerDay × DayFromYear
(y)

次の式で、時刻値から年を計算できます。

YearFromTime(t)
= TimeFromYear(y) ≦ t となる正の無限大に最も近い最大の整数y

うるう年関数は、うるう年内は1、それ以外はゼロです。

InLeapYear(t)
= DaysInYear(YearFromTime(t)) = 365 なら、0
= DaysInYear(YearFromTime(t)) = 366 なら、1

20.4.1.4 月番号(Month Number)

月は、0から11までの整数です。 時刻値tから月番号へのMonthFromTime(t)のマッピングは、次のように定義されます。

MonthFromTime(t)
= 0 ≦ DayWithinYear(t) < 31 なら、0
= 31 ≦ DayWithinYear(t) < 59 + InLeapYear(t) なら、1
= 59 + InLeapYear(t) ≦ DayWithinYear(t) < 90 + InLeapYear(t) なら、2
= 90 + InLeapYear(t) ≦ DayWithinYear(t) < 120 + InLeapYear(t) なら、3
= 120 + InLeapYear(t) ≦ DayWithinYear(t) < 151 + InLeapYear(t) なら、4
= 151 + InLeapYear(t) ≦ DayWithinYear(t) < 181 + InLeapYear(t) なら、5
= 181 + InLeapYear(t) ≦ DayWithinYear(t) < 212 + InLeapYear(t) なら、6
= 212 + InLeapYear(t) ≦ DayWithinYear(t) < 243 + InLeapYear(t) なら、7
= 243 + InLeapYear(t) ≦ DayWithinYear(t) < 273 + InLeapYear(t) なら、8
= 273 + InLeapYear(t) ≦ DayWithinYear(t) < 304 + InLeapYear(t) なら、9
= 304 + InLeapYear(t) ≦ DayWithinYear(t) < 334 + InLeapYear(t) なら、10
= 334 + InLeapYear(t) ≦ DayWithinYear(t) < 365 + InLeapYear(t) なら、11

上式で呼び出しているDayWithinYearは次の通り

DayWithinYear(t) = Day(t) - DayFromYear(YearFromTime(t))

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日木曜日に対応します。

20.4.1.5 日番号(Date Number)

日付番号は、1から31までの整数です。 時刻値tから日付番号へのDateFromTime(t)のマッピングは、次のように定義されます。

DateFromTime(t)
= DayWithinYear(t) + MonthFromTime(t) = 0 なら 1
= DayWithinYear(t) - MonthFromTime(t) = 1 なら 30
= DayWithinYear(t) - 58 - MonthFromTime(t) = 2 なら InLeapYear(t)
= DayWithinYear(t) - 89 - MonthFromTime(t) = 3 なら InLeapYear(t)
= DayWithinYear(t) - 119 - MonthFromTime(t) = 4 なら InLeapYear(t)
= DayWithinYear(t) - 150 - MonthFromTime(t) = 5 なら InLeapYear(t)
= DayWithinYear(t) - 180 - MonthFromTime(t) = 6 なら InLeapYear(t)
= DayWithinYear(t) - 211 - MonthFromTime(t) = 7 なら InLeapYear(t)
= DayWithinYear(t) - 242 - MonthFromTime(t) = 8 なら InLeapYear(t)
= DayWithinYear(t) - 272 - MonthFromTime(t) = 9 なら InLeapYear(t)
= DayWithinYear(t) - 303 - MonthFromTime(t) = 10 なら InLeapYear(t)
= DayWithinYear(t) - 333 - MonthFromTime(t) = 11 なら InLeapYear(t)

20.4.1.6 曜日(Week Day)

時刻値tの曜日は、次のように定義されます。

WeekDay(t) = (Day(t) + 4) modulo 7

曜日の値0は日曜日、 1は月曜日、 2は火曜日、 3は水曜日、 4は木曜日、 5は金曜日、 6は土曜日です。 WeekDay(0) = 4 です。これは、1970年1月1日木曜日に対応します。

20.4.1.7 LocalTZA ( t, isUTC )

LocalTZA(t, isUTC)は、ローカルタイムゾーンの調整またはオフセットをミリ秒単位で返す実装定義のアルゴリズムです。 このセクションで指定された方法は、tで標準時間と夏時間に関する政治規則を使用する必要があります。

isUTCtrueのとき、LocalTZA(tUTC,true)は、時刻値tUTCで表される時刻とUTCとのミリ秒単位のローカルタイムゾーンのオフセットを返します。 結果がtUTCに追加されると、対応する数値tlocalが生成されます。

isUTCfalseのとき、LocalTZA(tlocal,false)は、数値tlocalとUTCからのローカルタイムゾーンのオフセットをミリ秒単位で返します。 結果をtlocalから減算すると、対応する時間値tUTCが得られます。

tlocalが、負のタイムゾーン遷移で複数回繰り返される現地時間を表す場合(たとえば、夏時間が終了した場合、またはタイムゾーンルールの変更によりタイムゾーンオフセットが減少した場合)、または正のタイムゾーン遷移で現地時間をスキップした場合(たとえば、 夏時間が開始されるか、タイムゾーンルールの変更によりタイムゾーンオフセットが増加する場合)、tlocalは、移行前にタイムゾーンオフセットを使用して解釈します。

実装が上記の変換をサポートしていない場合、または時間tの政治的ルールが実装内で利用できない場合、結果は0です。

実装では、IANAタイムゾーンデータベースhttps://www.iana.org/time-zones/のタイムゾーン情報を使用することをお勧めします。2017年11月5日の午前1時30分(アメリカ/ニューヨーク)は2回繰り返されます(フォールバック)が、午前1時30分UTC-05ではなく午前1時30分UTC-04として解釈します。 LocalTZA(TimeClip(MakeDate(MakeDay(2017、10、5),MakeTime(1,30,0,0))),false)は -4 × msPerHour
です。

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

ローカルタイムゾーンのオフセット値は、正または負の場合があります。

20.4.1.8 LocalTime ( t )

引数tを指定した抽象演算LocalTimeは、次の手順を実行してtをUTCから現地時間に変換します。

  1. t + LocalTZA(t, true) を返す

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

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

20.4.1.9 UTC ( t )

引数tを指定した抽象演算UTCは、次の手順を実行してtを現地時間からUTCに変換します。

  1. t - LocalTZA(t, false) を返す
UTC(LocalTime(tUTC))は、もtUTCと等しいとは限りません。 同様に、LocalTime(UTC(tlocal))は必ずしもtlocalと等しいとは限りません。

20.4.1.10 時間、分、秒、ミリ秒(Hours, Minutes, Second, and Milliseconds)

次の抽象演算は、時間値を分解するのに役立ちます。

HourFromTime(t) = floor(t / msPerHour) modulo HoursPerDay

MinFromTime(t) = floor(t / msPerMinute) modulo MinutesPerHour

SecFromTime(t) = floor(t / msPerSecond) modulo SecondsPerMinute

msFromTime(t) = t modulo msPerSecond

上記の式は、次の値を使用します。

HoursPerDay = 24
MinutesPerHour = 60
SecondsPerMinute = 60
msPerSecond = 1000
msPerMinute = 60000 = msPerSecond × SecondsPerMinute
msPerHour = 3600000 = msPerMinute × MinutesPerHour

20.4.1.11 MakeTime ( hour, min, sec, ms )

抽象操作MakeTimeは、4つの引数からミリ秒数を計算します。これはECMAScript数値である必要があります。 この演算子は次のように機能します。

  1. 引数のどれかが有限ではないなら、 NaN を返す
  2. ! ToInteger(hour) を h とする
  3. ! ToInteger(min) を m とする
  4. ! ToInteger(sec) を s とする
  5. ! ToInteger(ms) を milli とする
  6. h * msPerHour + m * msPerMinute + s * msPerSecond + millit とする。計算は IEEE 754-2019ルール(つまり、ECMAScript演算子*および+を使用するかのように)従う。
  7. t を返す

20.4.1.12 MakeDay ( year, month, date )

抽象操作MakeDayは、ECMAScript数値である必要がある3つの引数から日数を計算します。 この演算子は次のように機能します。

  1. 引数のどれかが有限ではないなら、 NaN を返す
  2. ! ToInteger(year) を y とする
  3. ! ToInteger(month) を m とする
  4. ! ToInteger(date) を dt とする
  5. y + floor(m / 12) を ym とする
  6. m modulo 12 を mn とする
  7. YearFromTime(t) が ymMonthFromTime(t) が mnDateFromTime(t) が 1 となるような値tを求める。 不可能な場合(一部の引数が範囲外であるため)、NaNを返す。
  8. Day(t) + dt - 1 を返す

20.4.1.13 MakeDate ( day, time )

抽象操作MakeDateは、2つの引数からミリ秒数を計算します。これはECMAScript数値である必要があります。 この演算子は次のように機能します。

  1. 引数のどれかが有限ではないなら、 NaN を返す
  2. day × msPerDay + time を返す

20.4.1.14 TimeClip ( time )

抽象演算TimeClipは、引数からミリ秒数を計算します。これはECMAScript数値である必要があります。 この演算子は次のように機能します。

  1. time が有限ではないなら、 NaN を返す
  2. abs(time) > 8.64 × 1015 なら NaN を返す
  3. ! ToInteger(time) を返す

ステップ4のポイントは、実装が時間値の内部表現の選択を許可されていることです。たとえば、64ビットの符号付き整数または64ビットの浮動小数点値としてです。 実装に応じて、この内部表現は-0と+0を区別する場合としない場合があります。

ステップ3までしかないのにステップ4となっているのは、原文通り。

20.4.1.15 日時文字列フォーマット(Date Time String Format)

ECMAScriptは、ISO 8601カレンダー日付拡張形式の簡略化に基づいて、日時の文字列交換形式を定義します。

形式は次のとおりです。
YYYY-MM-DDTHH:mm:ss.sssZ

各要素は次の意味を持ちます。

YYYY 先発グレゴリオ暦の0000から9999までの10進数の4桁、または「+」または「-」の後に10進数の6桁が続く拡張年としての年です。
- "-"(ハイフン)は、文字通り表示されます。
MM 01(1月)から12(12月)までの2桁の月です。
DD 01から31までの2桁の日です。
T "T"は文字列に文字通り表示され、時間要素の始まりを示します。
HH 00から24までの2桁の時間です。
: ":"(コロン)は文字通り表示されます。
mm 00から59までの2桁の分数です。
ss 00から59までの2桁の秒数です。
. "."(ドット)は文字通り表示されます。
sss 3桁のミリ秒数です。
Z "Z"(オフセットのないUTCの場合)または"+"または"-"のいずれかのUTCオフセット表現です。その後に時間式HH:mm(それぞれ、UTCの前後の現地時間を示します)が続きます。

この形式には、日付のみのフォームが含まれます。

YYYY
YYYY-MM
YYYY-MM-DD

上記の日付のみのフォームの1つと、その直後にオプションのUTCオフセット表現が追加された次の時間フォームの1つで構成される日時フォームも含まれます。

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

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

1つの日付に2つの表記00:00と24:00を使用できます。 この2つの表記がまったく同じ時点を参照しています。例:1995-02-04T24:00と1995-02-05T00:00。 後者の形式は暦日の終わりとしての解釈でISO 8601と一致していますが、その仕様では時間間隔を記述するために予約されており、単一の時点の表現内では許可されていません。
CET、ESTなどの常用タイムゾーンの略語を指定する国際標準は存在せず、2つの非常に異なるタイムゾーンでも同じ略語が使用される場合があります。 このため、ISO 8601とこの形式の両方で、タイムゾーンオフセットの数値表現が指定されています。
20.4.1.15.1 拡張年(Expanded Years)

1970年1月1日(20.4.1.1)から約273,790年前後のフルタイム値の範囲をカバーする場合、0より前または9999より後の年を表す必要があります。ISO8601では、年の表現の拡張が許可されています。ただし 情報交換に関わる発信側と受信側の両者が合意したときのみです。 簡略化されたECMAScript形式では、拡張された年の表現は6桁で、+または-記号が前に付けられます。 0年は正と見なされるため、接頭辞として+記号が付きます。 日時文字列フォーマットに一致する文字列と、時間値の範囲外時刻を表す展開された年は、Date.parseによって認識できないものとして扱われ、その関数は実装固有の動作やヒューリスティックにフォールバックせずにNaNを返します。

年を拡張した日時値の例:-271821-04-20T00:00:00Z    271822 B.C.
-000001-01-01T00:00:00Z    2 B.C.
+000000-01-01T00:00:00Z    1 B.C.
+000001-01-01T00:00:00Z    1 A.D.
+001970-01-01T00:00:00Z    1970 A.D.
+002009-12-15T00:00:00Z    2009 A.D.
+275760-09-13T00:00:00Z    275760 A.D.

20.4.2 Dateコンストラクター(The Date Constructor)

Dateコンストラクターは、次のような特徴があります。

  • 組み込みオブジェクト%Date%です。
  • グローバルオブジェクト"Date"プロパティの初期値です。
  • コンストラクターとして呼び出されると、新しいDateオブジェクトを作成して初期化します。
  • 関数として呼び出された場合、現在の時刻(UTC)を表す文字列を返します。
  • 引数の数とタイプに基づいて動作がオーバーロードされる単一の関数です。
  • サブクラス化できるように設計されています。 クラス定義のextends句の値として使用できます。 サブクラスコンストラクターには、[[DateValue]]内部スロットとサブクラスインスタンスを作成および初期化するためにDateコンストラクターへのsuperコールを含める必要があります。
  • 値が7の"length"プロパティがあります。

20.4.2.1 Date ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )

この説明は、Dateコンストラクターが2つ以上の引数で呼び出された場合にのみ適用されます。
Date関数が呼び出されると、次の手順が実行されます。

  1. 引数の数 numberOfArgs とする
  2. Assert: numberOfArgs ≧ 2
  3. NewTargetundefined なら、
    1. 現在の時刻を識別する時刻値(UTC)である数値を now とする
    2. ToDateString(now) を返す
  4. 3. と異なるなら、
    1. ? ToNumber(year) を y とする
    2. ? ToNumber(month) を m とする
    3. date が存在するなら、 ? ToNumber(date) を、異なるなら 1 を dt とする
    4. hours が存在するなら、 ? ToNumber(hours) を、異なるなら 0 を h とする
    5. minutes が存在するなら、 ? ToNumber(minutes) を、異なるなら 0 を min とする
    6. seconds が存在するなら、 ? ToNumber(seconds) を、異なるなら 0 を s とする
    7. ms が存在するなら、 ? ToNumber(ms) を、異なるなら 0 を milli とする
    8. yNaN なら、 NaNyr とする
    9. h. と異なるなら、
      1. ! ToInteger(y) を yi とする
      2. 0 ≦ yi ≦ 99 なら 1900 + yi を、 異なるなら yyr とする
    10. MakeDate( MakeDay(yr, m, dt), MakeTime(h, min, s, milli)) を finalDate とする
    11. ? OrdinaryCreateFromConstructor(NewTarget, "%Date.prototype%", « [[DateValue]] ») を O とする
    12. TimeClip( UTC(finalDate)) を O.[[DateValue]] にセットする
    13. O を返す

20.4.2.2 Date ( value )

この説明は、Dateコンストラクターが1つの引数で呼び出された場合にのみ適用されます。

Date関数が呼び出されると、次の手順が実行されます。

  1. 引数の数を numberOfArgs とする
  2. Assert: numberOfArgs = 1
  3. NewTargetundefined なら、
    1. 現在の時刻を識別する時刻値(UTC)である数値を now とする
    2. ToDateString(now) を返す
  4. 3. と異なるなら、
    1. Type(value) が Object型 で value が [[DateValue]] 内部スロットを持っているなら、
      1. thisTimeValue(value) を tv とする
    2. a. と異なるなら、
      1. ? ToPrimitive(value) を v とする
      2. Type(v) が String型 なら、
        1. Assert: The next step never returns an 突然の完了 because Type(v) が String型なので、次ステップで突然の完了が返されることがない
        2. parseメソッド(20.4.3.2)の方法で、v を日付として解析した結果を tv とする
      3. ii. と異なるなら、
        1. ? ToNumber(v) を tv とする
    3. ? OrdinaryCreateFromConstructor(NewTarget, "%Date.prototype%", « [[DateValue]] ») を O とする
    4. TimeClip(tv) を O.[[DateValue]] にセットする
    5. O を返す

20.4.2.3 Date ( )

この説明は、Dateコンストラクターが引数なしで呼び出された場合にのみ適用されます。

Date関数が呼び出されると、次の手順が実行されます。

  1. 引数の数を numberOfArgs とする
  2. Assert: numberOfArgs = 0
  3. NewTargetundefined なら、
    1. 現在の時刻を識別する時刻値(UTC)である数値を now とする
    2. ToDateString(now) を返す
  4. 3. と異なるなら、
    1. ? OrdinaryCreateFromConstructor(NewTarget, "%Date.prototype%", « [[DateValue]] ») を O とする
    2. 現在の時刻を識別する時刻値(UTC)を O.[[DateValue]] にセットする
    3. O を返す

20.4.3 Dateコンストラクターのプロパティ(Properties of the Date Constructor)

Dateコンストラクターは、次のような特徴があります。

  • [[Prototype]]内部スロットがあり、値は%Function.prototype%です。
  • 以下のプロパティがあります。

20.4.3.1 Date.now ( )

now関数は、nowが呼び出された時点での、UTC日時を指定する時間値であるNumber値を返します。

20.4.3.2 Date.parse ( string )

解析関数は、ToString演算子を引数に適用します。 ToStringによって突然の完了が発生した場合、その時点で完了レコードを返します。 それ以外の場合、parseは結果の文字列を日付と時刻として解釈します。 日付と時刻に対応するUTC時刻値である数値を返します。 文字列は、文字列の内容に応じて、現地時間、UTC時間、またはその他のタイムゾーンの時間として解釈されます。 最初にこの関数は、拡張年を含め、日時文字列フォーマットで説明されている形式に従って文字列の解析を試みます。 文字列がその形式に準拠していない場合、関数は実装固有のヒューリスティックまたは実装固有の日付形式にフォールバックする可能性があります。 認識できない文字列、または範囲外のフォーマット要素値を含む文字列のとき、Date.parseはNaNを返します。

文字列が日時文字列フォーマットに準拠している場合、存在しない形式要素の代わりに代替値が使用されます。 MMまたはDD要素がない場合は、"01"が使用されます。 HH、mm、またはss要素がない場合は、"00"が使用されます。 sss要素がない場合は、"000"が使用されます。 UTCオフセット表現がない場合、日付のみのフォームはUTC時刻として解釈され、日時フォームは現地時間として解釈されます。

ECMAScriptのミリ秒数がゼロで参照されるすべてのプロパティに初期値があるDateオブジェクトをxとした場合、次のすべての式はその実装で同じ数値を生成します。

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

しかし、次の式は、前の3つの式と同じ数値を生成する必要はありません。

Date.parse(x.toLocaleString())

通常、Date.parseによって生成される値は、日時文字列フォーマットに準拠しない文字列値が指定された場合、実装に依存します。 そして、それはtoStringまたはtoUTCStringメソッドによるその実装では生成できません。

20.4.3.3 Date.prototype

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

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

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

UTC が呼び出されると、次の手順が実行されます。

  1. ? ToNumber(year) を y とする
  2. month が存在するなら、 ? ToNumber(month) を、異なるなら 0 を m とする
  3. date が存在するなら、 ? ToNumber(date) を、異なるなら、 1 を dt とする
  4. hours が存在するなら、 ? ToNumber(hours) を、異なるなら 0 を h とする
  5. minutes が存在するなら、 ? ToNumber(minutes) を、異なるなら 0 を min とする
  6. seconds が存在するなら、 ? ToNumber(seconds) を、異なるなら 0 を s とする
  7. ms が存在するなら、 ? ToNumber(ms) を、異なるなら 0 を milli とする
  8. yNaN なら、 NaNyr とする
  9. 8. と異なるなら、
    1. ! ToInteger(y) を yi とする
    2. 0 ≦ yi ≦ 99 なら 1900 + yi を、異なるなら yyr とする
  10. TimeClip( MakeDate( MakeDay(yr, m, dt), MakeTime(h, min, s, milli))) を返す

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

UTC関数は、2つの点でDateコンストラクターとは異なります。1つは、Dateオブジェクトを作成するのではなく、数値として時刻値を返すこと、もう1つは、現地時間ではなくUTCで引数を解釈することです。

20.4.4 Dateプロトタイプオブジェクトのプロパティ(Properties of the Date Prototype Object)

Dateプロトタイプオブジェクトは、次のような特徴があります。

  • 組み込みオブジェクト%DatePrototype%です。
  • それ自体は普通のオブジェクトです。
  • Dateインスタンスではありません。[[DateValue]]内部スロットがありません。
  • [[Prototype]]内部スロットがあり、値は%Object.prototype%です。

特に明示的に定義されていない限り、以下で定義されているDateプロトタイプオブジェクトのメソッドは汎用ではありません。渡されるthis値は、時刻値で初期化された[[DateValue]]内部スロットを持つオブジェクトである必要があります。

抽象操作thisTimeValue(value)は、次の手順を実行します。

  1. Type(value) が Object型で value が [[DateValue]] 内部スロットを持っているなら、
    1. value.[[DateValue]] を返す
  2. TypeError例外をスローする

Dateプロトタイプオブジェクトのプロパティ関数の説明中で使用される「thisのDateオブジェクト」という句は、関数のthis値を指します。 this値の型がオブジェクトでない場合、TypeError例外がスローされます。 メソッド仕様内の「thisの時刻値」という句は、this値を使用して抽象操作thisTimeValueを呼び出した結果を指します。

20.4.4.1 Date.prototype.constructor

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

20.4.4.2 Date.prototype.getDate ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. DateFromTime(LocalTime(t)) を返す

20.4.4.3 Date.prototype.getDay ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. WeekDay( LocalTime(t)) を返す

20.4.4.4 Date.prototype.getFullYear ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. YearFromTime( LocalTime(t)) を返す

20.4.4.5 Date.prototype.getHours ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. HourFromTime( LocalTime(t)) を返す

20.4.4.6 Date.prototype.getMilliseconds ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. msFromTime( LocalTime(t)) を返す

20.4.4.7 Date.prototype.getMinutes ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. MinFromTime( LocalTime(t)) を返す

20.4.4.8 Date.prototype.getMonth ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. MonthFromTime( LocalTime(t)) を返す

20.4.4.9 Date.prototype.getSeconds ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. SecFromTime( LocalTime(t)) を返す

20.4.4.10 Date.prototype.getTime ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を返す

20.4.4.11 Date.prototype.getTimezoneOffset ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. (t - LocalTime(t)) / msPerMinute を返す

20.4.4.12 Date.prototype.getUTCDate ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. DateFromTime(t) を返す

20.4.4.13 Date.prototype.getUTCDay ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. WeekDay(t) を返す

20.4.4.14 Date.prototype.getUTCFullYear ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. YearFromTime(t) を返す

20.4.4.15 Date.prototype.getUTCHours ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. HourFromTime(t) を返す

20.4.4.16 Date.prototype.getUTCMilliseconds ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. msFromTime(t) を返す

20.4.4.17 Date.prototype.getUTCMinutes ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. MinFromTime(t) を返す

20.4.4.18 Date.prototype.getUTCMonth ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. MonthFromTime(t) を返す

20.4.4.19 Date.prototype.getUTCSeconds ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら、 NaN を返す
  3. SecFromTime(t) を返す

20.4.4.20 Date.prototype.setDate ( date )

次の手順が実行されます。

  1. LocalTime(? thisTimeValue(this値)) を t とする
  2. ? ToNumber(date) を dt とする
  3. MakeDate( MakeDay( YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)) を newDate とする
  4. TimeClip( UTC(newDate)) を u とする
  5. uthisのDateオブジェクトの [[DateValue]] 内部スロットにセットする
  6. u を返す

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

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら +0 を、異なるなら LocalTime(t) を t にセットする
  3. ? ToNumber(year) を y とする
  4. month が存在しないなら、 MonthFromTime(t) を、異なるなら、? ToNumber(month) を m とする
  5. date が存在しないなら、 DateFromTime(t) を、異なるなら ? ToNumber(date) を dt とする
  6. MakeDate( MakeDay(y, m, dt), TimeWithinDay(t)) を newDate とする
  7. TimeClip( UTC(newDate)) を u とする
  8. uthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  9. u を返す

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

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

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

次の手順が実行されます。

  1. LocalTime(? thisTimeValue(this値)) を t とする
  2. ? ToNumber(hour) を h とする
  3. min が存在しないなら、 MinFromTime(t) を、異なるなら ? ToNumber(min) を m とする
  4. sec が存在しないなら、 SecFromTime(t) を、異なるなら ? ToNumber(sec) を s とする
  5. ms が存在しないなら、 msFromTime(t) を、異なるなら ? ToNumber(ms) を milli とする
  6. MakeDate( Day(t), MakeTime(h, m, s, milli)) を date とする
  7. TimeClip( UTC(date)) を u とする
  8. uthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  9. u を返す

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

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

20.4.4.23 Date.prototype.setMilliseconds ( ms )

次の手順が実行されます。

  1. LocalTime(? thisTimeValue(this値)) を t とする
  2. ? ToNumber(ms) を ms にセットする
  3. MakeTime( HourFromTime(t), MinFromTime(t), SecFromTime(t), ms) を time とする
  4. TimeClip( UTC( MakeDate( Day(t), time))) を u とする
  5. uthisのDateオブジェクトの [[DateValue]] 内部スロット にセットする
  6. u を返す

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

次の手順が実行されます。

  1. LocalTime(? thisTimeValue(this値)) を t とする
  2. ? ToNumber(min) を m とする
  3. sec が存在しないなら、 SecFromTime(t) を、異なるなら ? ToNumber(sec) を s とする
  4. ms が存在しないなら、 msFromTime(t) を、異なるなら ? ToNumber(ms) を milli とする
  5. MakeDate( Day(t), MakeTime( HourFromTime(t), m, s, milli)) を date とする
  6. TimeClip( UTC(date)) を u とする
  7. uthisのDateオブジェクトの [[DateValue]] 内部スロット にセットする
  8. u を返す

setMinutes の "length"プロパティは 3 です。

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

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

次の手順が実行されます。

  1. LocalTime(? thisTimeValue(this値)) を t とする
  2. ? ToNumber(month) を m とする
  3. date が存在しないなら、 DateFromTime(t) を、異なるなら ? ToNumber(date) を dt とする
  4. MakeDate( MakeDay( YearFromTime(t), m, dt), TimeWithinDay(t)) を newDate とする
  5. TimeClip( UTC(newDate)) を u とする
  6. uthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  7. u を返す

setMonth の "length"プロパティは 2 です。

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

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

次の手順が実行されます。

  1. LocalTime(? thisTimeValue(this値)) を t とする
  2. ? ToNumber(sec) を s とする
  3. ms が存在しないなら、 msFromTime(t) を、異なるなら ? ToNumber(ms) を milli とする
  4. MakeDate( Day(t), MakeTime( HourFromTime(t), MinFromTime(t), s, milli)) を date とする
  5. TimeClip( UTC(date)) を u とする
  6. uthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  7. u を返す

setSeconds の "length"プロパティは 2 です。

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

20.4.4.27 Date.prototype.setTime ( time )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を実行する
  2. ? ToNumber(time) を t とする
  3. TimeClip(t) を v とする
  4. vthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  5. v を返す

20.4.4.28 Date.prototype.setUTCDate ( date )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. ? ToNumber(date) を dt とする
  3. MakeDate( MakeDay( YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)) を newDate とする
  4. TimeClip(newDate) を v とする
  5. vthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  6. v を返す

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

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. tNaN なら +0t にセットする
  3. ? ToNumber(year) を y とする
  4. month が存在しないなら、 MonthFromTime(t) を、異なるなら ? ToNumber(month) を m とする
  5. date が存在しないなら、 DateFromTime(t) を、異なるなら ? ToNumber(date) を dt とする
  6. MakeDate( MakeDay(y, m, dt), TimeWithinDay(t)) を newDate とする
  7. TimeClip(newDate) を v とする
  8. vthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  9. v を返す

setUTCFullYear の "length"プロパティは 3 です。

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

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

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. ? ToNumber(hour) を h とする
  3. min が存在しないなら、 MinFromTime(t) を、異なるなら ? ToNumber(min) を m とする
  4. sec が存在しないなら、 SecFromTime(t) を、異なるなら ? ToNumber(sec) を s とする
  5. ms が存在しないなら、 msFromTime(t) を、異なるなら ? ToNumber(ms) を milli とする
  6. MakeDate( Day(t), MakeTime(h, m, s, milli)) を newDate とする
  7. TimeClip(newDate) を v とする
  8. vthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  9. v を返す

setUTCHours の "length"プロパティは 4 です。

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

20.4.4.31 Date.prototype.setUTCMilliseconds ( ms )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. ? ToNumber(ms) を milli とする
  3. MakeTime( HourFromTime(t), MinFromTime(t), SecFromTime(t), milli) を time とする
  4. TimeClip( MakeDate( Day(t), time)) を v とする
  5. vthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  6. v を返す

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

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. ? ToNumber(min) を m とする
  3. sec が存在しないなら、 SecFromTime(t) を s とする
  4. 3. と異なるなら、
    1. ? ToNumber(sec) を s とする
  5. ms が存在しないなら、 msFromTime(t) を milli とする
  6. 5. と異なるなら、
    1. ? ToNumber(ms) を milli とする
  7. MakeDate( Day(t), MakeTime( HourFromTime(t), m, s, milli)) を date とする
  8. TimeClip(date) を v とする
  9. vthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  10. v を返す

setUTCMinutes の "length"プロパティは 3 です。

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

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

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. ? ToNumber(month) を m とする
  3. date が存在しないなら、 DateFromTime(t) を dt とする
  4. 3. と異なるなら、
    1. ? ToNumber(date) を dt とする
  5. MakeDate( MakeDay( YearFromTime(t), m, dt), TimeWithinDay(t)) を newDate とする
  6. TimeClip(newDate) を v とする
  7. vthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  8. v を返す

setUTCMonth の "length"プロパティは 2 です。

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

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

次の手順が実行されます。

  1. ? thisTimeValue(this値) を t とする
  2. ? ToNumber(sec) を s とする
  3. ms が存在しないなら、 msFromTime(t) を milli とする
  4. 3. と異なるなら、
    1. ? ToNumber(ms) を milli とする
  5. MakeDate( Day(t), MakeTime( HourFromTime(t), MinFromTime(t), s, milli)) を date とする
  6. TimeClip(date) を v とする
  7. vthisのDateオブジェクト の [[DateValue]] 内部スロット にセットする
  8. v を返す

setUTCSeconds の "length"プロパティは 2 です。

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

20.4.4.35 Date.prototype.toDateString ( )

次の手順が実行されます。

  1. thisのDateオブジェクトO とする
  2. ? thisTimeValue(O) を tv とする
  3. tvNaN なら、 "Invalid Date" を返す
  4. LocalTime(tv) を t とする
  5. DateString(t) を返す

20.4.4.36 Date.prototype.toISOString ( )

thisの時刻値が有限の数値でない場合、または日時文字列フォーマットで表現できない年に対応する場合、この関数はRangeError例外をスローします。 それ以外の場合は、すべてのフォーマット要素とUTCオフセット表現"Z"を含む、UTCタイムスケールでのそのフォーマットのthisの時刻値の文字列表現を返します。

20.4.4.37 Date.prototype.toJSON ( key )

この関数は、JSON.stringify(24.5.2)で使用するDateオブジェクトの文字列表現を提供します。

toJSON が引数 key で呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? ToPrimitive(O, hint Number) を tv とする
  3. Type(tv) が Number型 で tv が有限でないなら、 null を返す
  4. ? Invoke(O, "toISOString") を返す
引数は無視されます。
toJSON関数は汎用的です。 this値がDateオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用することができます。 ただし、そのようなオブジェクトにはtoISOStringメソッドが必要です。

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

ECMA-402国際化APIを含むECMAScript実装は、ECMA-402仕様で指定されているようにDate.prototype.toLocaleDateStringメソッドを実装する必要があります。 ECMAScript実装にECMA-402APIが含まれていない場合は、toLocaleDateStringメソッドの次の仕様が使用されます。

この関数は文字列値を返します。 文字列の内容は実装に依存しますが、ホスト環境の現在のロケールの規則に対応する人間が読めて使いやすい形式で、現在のタイムゾーンの日時の「日付」部分を表すことを目的としています。

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

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

ECMA-402国際化APIを含むECMAScript実装は、ECMA-402仕様で指定されているようにDate.prototype.toLocaleStringメソッドを実装する必要があります。 ECMAScript実装にECMA-402APIが含まれていない場合は、toLocaleStringメソッドの次の仕様が使用されます。

この関数は文字列値を返します。 文字列の内容は実装に依存しますが、ホスト環境の現在のロケールの規則に対応する人間が読めて使いやすい形式で、現在のタイムゾーンの日時を表すことを目的としています。

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

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

ECMA-402国際化APIを含むECMAScript実装は、ECMA-402仕様で指定されているようにDate.prototype.toLocaleTimeStringメソッドを実装する必要があります。 ECMAScript実装にECMA-402APIが含まれていない場合は、toLocaleTimeStringメソッドの次の仕様が使用されます。

この関数は文字列値を返します。 文字列の内容は実装に依存しますが、ホスト環境の現在のロケールの規則に対応する人間が読めて使いやすい形式で、現在のタイムゾーンの日時の「時間」部分を表すことを目的としています。

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

20.4.4.41 Date.prototype.toString ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を tv とする
  2. ToDateString(tv) を返す
ミリ秒数がゼロのDateオブジェクトをdとするとき、Date.parse(d.toString())の結果はd.valueOf()と等しくなります。 20.4.3.2を参照してください。
toString関数は汎用的ではありません。 this値がDateオブジェクトでない場合は、TypeError例外をスローします。 したがって、他の種類のオブジェクトで使用できません。
20.4.4.41.1 ランタイムセマンティクス(Runtime Semantics): TimeString ( tv )

次の手順が実行されます。

  1. Assert: Type(tv) は Number型
  2. Assert: tvNaN ではない
  3. HourFromTime(tv) の計算結果を2桁の10進数としてフォーマット(必要に応じて左側にゼロを付与)した文字列表現を hour とする
  4. MinFromTime(tv) の計算結果を2桁の10進数としてフォーマット(必要に応じて左側にゼロを付与)した文字列表現を minute とする
  5. SecFromTime(tv) の計算結果を2桁の10進数としてフォーマット(必要に応じて左側にゼロを付与)した文字列表現を second とする
  6. hour":"minute":"second と コードユニット 0x0020 (SPACE) と "GMT" の文字列連結を返す
20.4.4.41.2 ランタイムセマンティクス(Runtime Semantics): DateString ( tv )

次の手順が実行されます。

  1. Assert: Type(tv) は Number型
  2. Assert: tvNaN ではない
  3. WeekDay(tv) の結果を 表50番号としたとき、対応する名前を weekday とする
  4. MonthFromTime(tv) の結果を 表51番号としたとき、対応する名前month とする
  5. DateFromTime(tv) の計算結果を2桁の10進数としてフォーマット(必要に応じて左側にゼロを付与)した文字列表現を day とする
  6. YearFromTime(tv) を yv とする
  7. yv ≧ 0 なら empty String を、異なるなら "-"yearSign とする
  8. abs(yv) を10進数としてフォーマットした文字列表現を year とする
  9. ! StringPad(year, 4, "0", start) を paddedYear とする
  10. weekday と コードユニット 0x0020 (SPACE) と month と コードユニット 0x0020 (SPACE) と day と コードユニット 0x0020 (SPACE) と yearSignpaddedYear の文字列連結を返す
表50: 曜日の名前
番号 名前
0 "Sun"
1 "Mon"
2 "Tue"
3 "Wed"
4 "Thu"
5 "Fri"
6 "Sat"
表51: 年の月の名前
番号 名前
0 "Jan"
1 "Feb"
2 "Mar"
3 "Apr"
4 "May"
5 "Jun"
6 "Jul"
7 "Aug"
8 "Sep"
9 "Oct"
10 "Nov"
11 "Dec"
20.4.4.41.3 ランタイムセマンティクス(Runtime Semantics): TimeZoneString ( tv )

次の手順が実行されます。

  1. Assert: Type(tv) は Number型
  2. Assert: tvNaN ではない
  3. LocalTZA(tv, true) を offset とする
  4. offset ≧ 0 なら "+" を、異なるなら "-"offsetSign とする
  5. MinFromTime( abs(offset)) の計算結果を2桁の10進数としてフォーマット(必要に応じて左側にゼロを付与)した文字列表現を offsetMin とする
  6. HourFromTime( abs(offset)) の計算結果を2桁の10進数としてフォーマット(必要に応じて左側にゼロを付与)した文字列表現を offsetHour とする
  7. empty Stringまたは、コードユニット 0x0020 (SPACE) と コードユニット 0x0028 (LEFT PARENTHESIS) と 実装に依存するタイムゾーン名 と コードユニット 0x0029 (RIGHT PARENTHESIS) の文字列連結を tzName とする
  8. offsetSignoffsetHouroffsetMintzName の文字列連結を返す
20.4.4.41.4 ランタイムセマンティクス(Runtime Semantics): ToDateString ( tv )

次の手順が実行されます。

  1. Assert: Type(tv) は Number型
  2. tvNaN なら、 "Invalid Date" を返す
  3. LocalTime(tv) を t とする
  4. DateString(t) と コードユニット 0x0020 (SPACE) と TimeString(t) と TimeZoneString(tv) の文字列連結を返す

20.4.4.42 Date.prototype.toTimeString ( )

次の手順が実行されます。

  1. thisのDateオブジェクトO とする
  2. ? thisTimeValue(O) を tv とする
  3. tvNaN なら、 "Invalid Date" を返す
  4. LocalTime(tv) を t とする
  5. TimeString(t) と TimeZoneString(tv) の文字列連結を返す

20.4.4.43 Date.prototype.toUTCString ( )

toUTCStringメソッドは、thisの時刻値に対応する文字列値を返します。 文字列の形式は、RFC 7231の「HTTP-date」に基づいており、ECMAScriptDateオブジェクトでサポートされるすべての時間範囲をサポートするように一般化されています。 次の手順を実行します。

  1. thisのDateオブジェクトO とする
  2. ? thisTimeValue(O) を tv とする
  3. tvNaN なら、 "Invalid Date" を返す
  4. WeekDay(tv) の結果を表50番号とし、対応する名前weekday とする
  5. MonthFromTime(tv) の結果を表51番号とし、対応する名前month とする
  6. DateFromTime(tv) の計算結果を2桁の10進数としてフォーマット(必要に応じて左側にゼロを付与)した文字列表現を day とする
  7. YearFromTime(tv) を yv とする
  8. yv ≧ 0 なら empty String を、異なるなら "-"yearSign とする
  9. abs(yv) を10進数としてフォーマットした文字列形式を year とする
  10. ! StringPad(year, 4, "0", start) を paddedYear とする
  11. weekday"," と コードユニット 0x0020 (SPACE) と day と コードユニット 0x0020 (SPACE) と month と コードユニット 0x0020 (SPACE) と yearSignpaddedYear と コードユニット 0x0020 (SPACE) と TimeString(tv) の文字列連結を返す

20.4.4.44 Date.prototype.valueOf ( )

次の手順が実行されます。

  1. ? thisTimeValue(this値) を返す

20.4.4.45 Date.prototype [ @@toPrimitive ] ( hint )

この関数は、Dateオブジェクトをプリミティブ値に変換するためにECMAScript言語演算子によって呼び出されます。 ヒントに許可される値は、"default""number""string"です。"default""string"と同等として扱うのは、Dateオブジェクトだけです。他のすべての組み込みECMAScriptオブジェクトは、"default""number"と同等として扱います。

@@toPrimitive が引数 hint で呼び出されると、次の手順が実行されます。

  1. this値 を O とする
  2. Type(O) が Object型 でないなら、TypeError例外をスローする
  3. hint"string""default" なら、
    1. "string"tryFirst とする
  4. 3. と異なり hint"number" なら、
    1. "number"tryFirst とする
  5. 4. と異なるなら、 TypeError例外をスローする
  6. ? OrdinaryToPrimitive(O, tryFirst) を返す

この関数の"name"プロパティの値は"[Symbol.toPrimitive]"です。

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

20.4.5 Dateインスタンスのプロパティ(Properties of Date Instances)

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