Multipage preference

21 Numbers and Dates

21.1 Number Objects

21.1.1 The Number Constructor

Number constructorは:

  • %Number%です。
  • global object"Number" propertyのinitial valueです。
  • constructorとして呼び出されたとき、新しいNumber objectを作成およびinitializeします。
  • constructorとしてではなくfunctionとして呼び出されたとき、type conversionを実行します。
  • class definitionのextends clauseのvalueとして使用できます。指定されたNumber behaviourをinheritしようとするsubclass constructorsは、[[NumberData]] internal slotを持つsubclass instanceを作成およびinitializeするために、Number constructorへのsuper callを含まなければなりません。

21.1.1.1 Number ( value )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. valueが存在するなら、
    1. primitiveを ? ToNumeric(value) とする。
    2. primitiveがBigIntなら、n𝔽((primitive))とする。
    3. そうでなければ、nprimitiveとする。
  2. そうでなければ、
    1. n+0𝔽とする。
  3. NewTargetがundefinedなら、nを返す。
  4. objを ? OrdinaryCreateFromConstructor(NewTarget, "%Number.prototype%", « [[NumberData]] ») とする。
  5. obj.[[NumberData]]nに設定する。
  6. objを返す。

21.1.2 Properties of the Number Constructor

Number constructorは:

  • valueが%Function.prototype%である[[Prototype]] internal slotを持ちます。
  • 次のpropertiesを持ちます:

21.1.2.1 Number.EPSILON

Number.EPSILONのvalueは、1と、Number valueとしてrepresentableな1より大きい最小のvalueとの差のmagnitudeに対するNumber valueであり、およそ2.2204460492503130808472633361816 × 10-16です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.1.2.2 Number.isFinite ( number )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. numberがNumberでないなら、falseを返す。
  2. numberfiniteでないなら、falseを返す。
  3. trueを返す。

21.1.2.3 Number.isInteger ( number )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. numberintegral Numberなら、trueを返す。
  2. falseを返す。

21.1.2.4 Number.isNaN ( number )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. numberがNumberでないなら、falseを返す。
  2. numberNaNなら、trueを返す。
  3. falseを返す。
Note

このfunctionは、NaNであるかどうかをdetermineする前にそのargumentをNumberへconvertしないという点で、global isNaN function(19.2.3)とは異なります。

21.1.2.5 Number.isSafeInteger ( number )

Note

integer n は、nに対するNumber valueが他のどのintegerに対するNumber valueでもない場合に限り、“safe integer”です。

このfunctionは呼び出されたとき、次のstepsを実行します:

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

21.1.2.6 Number.MAX_SAFE_INTEGER

Note

IEEE 754-2019のprecision limitationsによって必要とされるrounding behaviourのため、Number.MAX_SAFE_INTEGERより大きいすべてのintegerに対するNumber valueは、少なくとも1つの他のintegerとsharedされます。したがって、そのようなlarge-magnitude integerssafeではなく、Number valuesとして正確にrepresentableであること、または互いにdistinguishableであることすらguaranteeされません。例えば、90071992547409929007199254740993はいずれもNumber value 9007199254740992𝔽へevaluateされます。

Number.MAX_SAFE_INTEGERのvalueは9007199254740991𝔽𝔽(253 - 1))です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.1.2.7 Number.MAX_VALUE

Number.MAX_VALUEのvalueはNumber typeのlargest positive finite valueであり、およそ1.7976931348623157 × 10308です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.1.2.8 Number.MIN_SAFE_INTEGER

Note

IEEE 754-2019のprecision limitationsによって必要とされるrounding behaviourのため、Number.MIN_SAFE_INTEGERより小さいすべてのintegerに対するNumber valueは、少なくとも1つの他のintegerとsharedされます。したがって、そのようなlarge-magnitude integerssafeではなく、Number valuesとして正確にrepresentableであること、または互いにdistinguishableであることすらguaranteeされません。例えば、-9007199254740992-9007199254740993はいずれもNumber value -9007199254740992𝔽へevaluateされます。

Number.MIN_SAFE_INTEGERのvalueは-9007199254740991𝔽𝔽(-(253 - 1)))です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.1.2.9 Number.MIN_VALUE

Number.MIN_VALUEのvalueはNumber typeのsmallest positive valueであり、およそ5 × 10-324です。

IEEE 754-2019 double precision binary representationでは、smallest possible valueはdenormalized numberです。implementationがdenormalized valuesをsupportしない場合、Number.MIN_VALUEのvalueは、そのimplementationによって実際にrepresentできるsmallest non-zero positive valueでなければなりません。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.1.2.10 Number.NaN

Number.NaNのvalueはNaNです。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.1.2.11 Number.NEGATIVE_INFINITY

Number.NEGATIVE_INFINITYのvalueは-∞𝔽です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.1.2.12 Number.parseFloat ( string )

"parseFloat" propertyのinitial valueは%parseFloat%です。

21.1.2.13 Number.parseInt ( string, radix )

"parseInt" propertyのinitial valueは%parseInt%です。

21.1.2.14 Number.POSITIVE_INFINITY

Number.POSITIVE_INFINITYのvalueは+∞𝔽です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.1.2.15 Number.prototype

Number.prototypeのinitial valueはNumber prototype objectです。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.1.3 Properties of the Number Prototype Object

Number prototype objectは:

  • %Number.prototype%です。
  • ordinary objectです。
  • それ自体がNumber objectです;valueが+0𝔽である[[NumberData]] internal slotを持ちます。
  • valueが%Object.prototype%である[[Prototype]] internal slotを持ちます。

明示的に別途述べられない限り、以下で定義されるNumber prototype objectのmethodsはgenericではなく、それらに渡されるthis valueは、Number valueであるか、Number valueへinitialize済みの[[NumberData]] internal slotを持つobjectでなければなりません。

methodのspecification内の“this Number value”というphraseは、method invocationのthis valueをargumentとして渡してabstract operation ThisNumberValueを呼び出した結果を指します。

21.1.3.1 Number.prototype.constructor

Number.prototype.constructorのinitial valueは%Number%です。

21.1.3.2 Number.prototype.toExponential ( fractionDigits )

このmethodは、this Number valueを、significandのdecimal pointの前に1桁、significandのdecimal pointの後にfractionDigits桁を持つdecimal exponential notationで表したStringを返します。fractionDigitsundefinedなら、Numberを一意に指定するために必要なだけのsignificand digitsを含めます(ToStringの場合と同様ですが、この場合Numberは常にexponential notationでoutputされる点が異なります)。

これは呼び出されたとき、次のstepsを実行します:

  1. numberを ? ThisNumberValue(this value) とする。
  2. fractionCountを ? ToIntegerOrInfinity(fractionDigits) とする。
  3. Assert: fractionDigitsundefinedなら、fractionCountは0である。
  4. numberfiniteでないなら、Number::toString(number, 10)を返す。
  5. fractionCount < 0またはfractionCount > 100なら、RangeError例外をthrowする。
  6. number(number)に設定する。
  7. signをempty Stringとする。
  8. number < 0なら、
    1. sign"-"に設定する。
    2. numberを-numberに設定する。
  9. number = 0なら、
    1. significandを、code unit 0x0030 (DIGIT ZERO)がfractionCount + 1回出現するString valueとする。
    2. exponentを0とする。
  10. そうでなければ、
    1. fractionDigitsundefinedでないなら、
      1. exponentおよびintSignificandを、10fractionCountintSignificand < 10fractionCount + 1であり、intSignificand × 10exponent - fractionCount - numberが可能な限りzeroに近くなるようなintegersとする。そのようなexponentおよびintSignificandのsetsが2つある場合、intSignificand × 10exponent - fractionCountがより大きい方のexponentおよびintSignificandを選ぶ。
    2. そうでなければ、
      1. exponentintSignificand、およびffを、ff ≥ 0、10ffintSignificand < 10ff + 1𝔽(intSignificand × 10exponent - ff)が𝔽(number)であり、ffが可能な限りsmallであるようなintegersとする。intSignificandのdecimal representationはff + 1 digitsを持ち、intSignificandは10で割り切れず、intSignificandのleast significant digitはこれらのcriteriaによって必ずしも一意にdeterminedされないことに注意。
      2. fractionCountffに設定する。
    3. significandを、intSignificandのdecimal representationのdigitsからなるString value(order通り、leading zeroesなし)とする。
  11. fractionCount ≠ 0なら、
    1. intPartsignificandの最初のcode unitとする。
    2. fractionalPartsignificandの他のfractionCount個のcode unitsとする。
    3. significandintPart"."、およびfractionalPartstring-concatenationに設定する。
  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のdecimal representationのdigitsからなるString value(order通り、leading zeroesなし)とする。
  14. significandsignificand"e"exponentSign、およびexponentDigitsstring-concatenationに設定する。
  15. signsignificandstring-concatenationを返す。
Note

上記のrulesでrequiredされるよりもaccurateなconversionsを提供するimplementationsについては、step 10.b.iの次のalternative versionをguidelineとして使用することがrecommendedされます:

  1. exponentintSignificand、およびffを、ff ≥ 0、10ffintSignificand < 10ff + 1𝔽(intSignificand × 10exponent - ff)が𝔽(number)であり、ffが可能な限りsmallであるようなintegersとする。intSignificandについて複数のpossibilitiesがある場合、𝔽(intSignificand × 10exponent - ff)が𝔽(number)にclosestであるようにintSignificandを選ぶ。そのようなintSignificandのpossible valuesが2つある場合、evenである方を選ぶ。

21.1.3.3 Number.prototype.toFixed ( fractionDigits )

Note 1

このmethodは、this Number valueをdecimal fixed-point notationで表し、decimal pointの後にfractionDigits桁を持つStringを返します。fractionDigitsundefinedなら、0がassumedされます。

これは呼び出されたとき、次のstepsを実行します:

  1. numberを ? ThisNumberValue(this value) とする。
  2. fractionCountを ? ToIntegerOrInfinity(fractionDigits) とする。
  3. Assert: fractionDigitsundefinedなら、fractionCountは0である。
  4. fractionCountfiniteでないなら、RangeError例外をthrowする。
  5. fractionCount < 0またはfractionCount > 100なら、RangeError例外をthrowする。
  6. numberfiniteでないなら、Number::toString(number, 10)を返す。
  7. number(number)に設定する。
  8. signをempty Stringとする。
  9. number < 0なら、
    1. sign"-"に設定する。
    2. numberを-numberに設定する。
  10. number ≥ 1021なら、
    1. digitStringを ! ToString(𝔽(number)) とする。
  11. そうでなければ、
    1. intValueを、intValue / 10fractionCount - numberが可能な限りzeroに近くなるintegerとする。そのようなintValueが2つある場合、より大きいintValueを選ぶ。
    2. intValue = 0なら、digitString"0"とする;そうでなければ、digitStringintValueのdecimal representationのdigitsからなるString value(order通り、leading zeroesなし)とする。
    3. fractionCount ≠ 0なら、
      1. digitCountdigitStringのlengthとする。
      2. digitCountfractionCountなら、
        1. zeroPadを、code unit 0x0030 (DIGIT ZERO)がfractionCount + 1 - digitCount回出現するString valueとする。
        2. digitStringzeroPaddigitStringstring-concatenationに設定する。
        3. digitCountfractionCount + 1に設定する。
      3. intPartdigitStringの最初のdigitCount - fractionCount個のcode unitsとする。
      4. fractionalPartdigitStringの他のfractionCount個のcode unitsとする。
      5. digitStringintPart"."、およびfractionalPartstring-concatenationに設定する。
  12. signdigitStringstring-concatenationを返す。
Note 2

toFixedのoutputは、一部のvaluesについてtoStringよりもpreciseである場合があります。これは、toStringがnumberをadjacent Number valuesとdistinguishするのに十分なsignificant digitsだけをprintするためです。例えば、

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

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

ECMA-402 Internationalization APIを含むECMAScript implementationは、このmethodをECMA-402 specificationで指定される通りにimplementしなければなりません。ECMAScript implementationがECMA-402 APIを含まない場合、このmethodの次のspecificationが使用されます:

このmethodは、host environmentのcurrent localeのconventionsに従ってformattedされたthis Number valueを表すString valueをproduceします。このmethodはimplementation-definedであり、toStringと同じものを返すことはpermissibleですが、encouragedはされません。

このmethodのoptional parametersのmeaningsはECMA-402 specificationで定義されます;ECMA-402 supportを含まないimplementationsは、それらのparameter positionsを他の目的に使用してはなりません。

21.1.3.5 Number.prototype.toPrecision ( precision )

このmethodは、this Number valueを、significandのdecimal pointの前に1桁、significandのdecimal pointの後にprecision - 1桁を持つdecimal exponential notation、またはprecision significant digitsを持つdecimal fixed notationのいずれかで表したStringを返します。precisionundefinedなら、代わりにToStringを呼び出します。

これは呼び出されたとき、次のstepsを実行します:

  1. numberを ? ThisNumberValue(this value) とする。
  2. precisionundefinedなら、! ToString(number)を返す。
  3. precisionCountを ? ToIntegerOrInfinity(precision) とする。
  4. numberfiniteでないなら、Number::toString(number, 10)を返す。
  5. precisionCount < 1またはprecisionCount > 100なら、RangeError例外をthrowする。
  6. number(number)に設定する。
  7. signをempty Stringとする。
  8. number < 0なら、
    1. signをcode unit 0x002D (HYPHEN-MINUS)に設定する。
    2. numberを-numberに設定する。
  9. number = 0なら、
    1. significandを、code unit 0x0030 (DIGIT ZERO)がprecisionCount回出現するString valueとする。
    2. exponentを0とする。
  10. そうでなければ、
    1. exponentおよびintSignificandを、10precisionCount - 1intSignificand < 10precisionCountであり、intSignificand × 10exponent - precisionCount + 1 - numberが可能な限りzeroに近くなるようなintegersとする。そのようなexponentおよびintSignificandのsetsが2つある場合、intSignificand × 10exponent - precisionCount + 1がより大きい方のexponentおよびintSignificandを選ぶ。
    2. significandを、intSignificandのdecimal representationのdigitsからなるString value(order通り、leading zeroesなし)とする。
    3. exponent < -6またはexponentprecisionCountなら、
      1. Assert: exponent ≠ 0である。
      2. precisionCount ≠ 1なら、
        1. intPartsignificandの最初のcode unitとする。
        2. fractionalPartsignificandの他のprecisionCount - 1個のcode unitsとする。
        3. significandintPart"."、およびfractionalPartstring-concatenationに設定する。
      3. exponent > 0なら、
        1. exponentSignをcode unit 0x002B (PLUS SIGN)とする。
      4. そうでなければ、
        1. Assert: exponent < 0である。
        2. exponentSignをcode unit 0x002D (HYPHEN-MINUS)とする。
        3. exponentを-exponentに設定する。
      5. exponentDigitsを、exponentのdecimal representationのdigitsからなるString value(order通り、leading zeroesなし)とする。
      6. signsignificand、code unit 0x0065 (LATIN SMALL LETTER E)、exponentSign、およびexponentDigitsstring-concatenationを返す。
  11. exponent = precisionCount - 1なら、signsignificandstring-concatenationを返す。
  12. exponent ≥ 0なら、
    1. significandを、significandの最初のexponent + 1個のcode units、code unit 0x002E (FULL STOP)、およびsignificandの残りのprecisionCount - (exponent + 1)個のcode unitsのstring-concatenationに設定する。
  13. そうでなければ、
    1. significandを、code unit 0x0030 (DIGIT ZERO)、code unit 0x002E (FULL STOP)、code unit 0x0030 (DIGIT ZERO)の-(exponent + 1)回のoccurrences、およびString significandstring-concatenationに設定する。
  14. signsignificandstring-concatenationを返す。

21.1.3.6 Number.prototype.toString ( [ radix ] )

Note

optional radixは、2𝔽から36𝔽までのinclusive interval内にあるintegral Number valueであるべきです。radixundefinedなら、10𝔽radixのvalueとして使用されます。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. xを ? ThisNumberValue(this value) とする。
  2. radixundefinedなら、radixMVを10とする。
  3. そうでなければ、radixMVを ? ToIntegerOrInfinity(radix) とする。
  4. radixMVが2から36までのinclusive interval内にないなら、RangeError例外をthrowする。
  5. Number::toString(x, radixMV)を返す。

このmethodはgenericではありません;そのthis valueがNumberまたはNumber objectでない場合、TypeError例外をthrowします。したがって、methodとして使用するために他の種類のobjectsへtransferすることはできません。

このmethodの"length" propertyは1𝔽です。

21.1.3.7 Number.prototype.valueOf ( )

  1. ThisNumberValue(this value)を返す。

21.1.3.7.1 ThisNumberValue ( arg )

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

  1. argがNumberなら、argを返す。
  2. argがObjectであり、arg[[NumberData]] internal slotを持つなら、
    1. numberarg.[[NumberData]]とする。
    2. Assert: numberはNumberである。
    3. numberを返す。
  3. TypeError例外をThrowする。

21.1.4 Properties of Number Instances

Number instancesは、Number prototype objectからpropertiesをinheritするordinary objectsです。Number instancesはまた[[NumberData]] internal slotを持ちます。[[NumberData]] internal slotは、このNumber objectによって表されるNumber valueです。

21.2 BigInt Objects

21.2.1 The BigInt Constructor

BigInt constructorは:

  • %BigInt%です。
  • global object"BigInt" propertyのinitial valueです。
  • constructorとしてではなくfunctionとして呼び出されたとき、type conversionを実行します。
  • new operatorとともに使用すること、またはsubclassedされることを意図していません。class definitionのextends clauseのvalueとして使用できますが、BigInt constructorへのsuper callはexceptionを引き起こします。

21.2.1.1 BigInt ( value )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. NewTargetがundefinedでないなら、TypeError例外をthrowする。
  2. primitiveを ? ToPrimitive(value, number) とする。
  3. primitiveがNumberなら、? NumberToBigInt(primitive)を返す。
  4. ToBigInt(primitive)を返す。

21.2.1.1.1 NumberToBigInt ( number )

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

  1. numberintegral Numberでないなら、RangeError例外をthrowする。
  2. ((number))を返す。

21.2.2 Properties of the BigInt Constructor

BigInt constructorは:

  • valueが%Function.prototype%である[[Prototype]] internal slotを持ちます。
  • 次のpropertiesを持ちます:

21.2.2.1 BigInt.asIntN ( bits, bigint )

このfunctionは呼び出されたとき、次のstepsを実行します:

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

21.2.2.2 BigInt.asUintN ( bits, bigint )

このfunctionは呼び出されたとき、次のstepsを実行します:

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

21.2.2.3 BigInt.prototype

BigInt.prototypeのinitial valueはBigInt prototype objectです。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.2.3 Properties of the BigInt Prototype Object

BigInt prototype objectは:

  • %BigInt.prototype%です。
  • ordinary objectです。
  • BigInt objectではなく、[[BigIntData]] internal slotを持ちません。
  • valueが%Object.prototype%である[[Prototype]] internal slotを持ちます。

methodのspecification内の“this BigInt value”というphraseは、method invocationのthis valueをargumentとして渡してabstract operation ThisBigIntValueを呼び出した結果を指します。

21.2.3.1 BigInt.prototype.constructor

BigInt.prototype.constructorのinitial valueは%BigInt%です。

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

ECMA-402 Internationalization APIを含むECMAScript implementationは、このmethodをECMA-402 specificationで指定される通りにimplementしなければなりません。ECMAScript implementationがECMA-402 APIを含まない場合、このmethodの次のspecificationが使用されます:

このmethodは、host environmentのcurrent localeのconventionsに従ってformattedされたthis BigInt valueを表すString valueをproduceします。このmethodはimplementation-definedであり、toStringと同じものを返すことはpermissibleですが、encouragedはされません。

このmethodのoptional parametersのmeaningsはECMA-402 specificationで定義されます;ECMA-402 supportを含まないimplementationsは、それらのparameter positionsを他の目的に使用してはなりません。

21.2.3.3 BigInt.prototype.toString ( [ radix ] )

Note

optional radixは、2𝔽から36𝔽までのinclusive interval内にあるintegral Number valueであるべきです。radixundefinedなら、10𝔽radixのvalueとして使用されます。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. xを ? ThisBigIntValue(this value) とする。
  2. radixundefinedなら、radixMVを10とする。
  3. そうでなければ、radixMVを ? ToIntegerOrInfinity(radix) とする。
  4. radixMVが2から36までのinclusive interval内にないなら、RangeError例外をthrowする。
  5. BigInt::toString(x, radixMV)を返す。

このmethodはgenericではありません;そのthis valueがBigIntまたはBigInt objectでない場合、TypeError例外をthrowします。したがって、methodとして使用するために他の種類のobjectsへtransferすることはできません。

21.2.3.4 BigInt.prototype.valueOf ( )

  1. ThisBigIntValue(this value)を返す。

21.2.3.4.1 ThisBigIntValue ( arg )

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

  1. argがBigIntなら、argを返す。
  2. argがObjectであり、arg[[BigIntData]] internal slotを持つなら、
    1. Assert: arg.[[BigIntData]]はBigIntである。
    2. arg.[[BigIntData]]を返す。
  3. TypeError例外をThrowする。

21.2.3.5 BigInt.prototype [ %Symbol.toStringTag% ]

%Symbol.toStringTag% propertyのinitial valueはString value "BigInt"です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }を持ちます。

21.2.4 Properties of BigInt Instances

BigInt instancesは、BigInt prototype objectからpropertiesをinheritするordinary objectsです。BigInt instancesはまた[[BigIntData]] internal slotを持ちます。[[BigIntData]] internal slotは、このBigInt objectによって表されるBigInt valueです。

21.3 The Math Object

Math objectは:

  • %Math%です。
  • global object"Math" propertyのinitial valueです。
  • ordinary objectです。
  • valueが%Object.prototype%である[[Prototype]] internal slotを持ちます。
  • function objectではありません。
  • [[Construct]] internal methodを持ちません;new operatorを伴うconstructorとして使用できません。
  • [[Call]] internal methodを持ちません;functionとして呼び出せません。
Note

この仕様では、“the Number value for x”というphraseは、6.1.6.1で定義されるtechnical meaningを持ちます。

21.3.1 Value Properties of the Math Object

21.3.1.1 Math.E

e、すなわちnatural logarithmsのbaseに対するNumber valueであり、およそ2.7182818284590452354です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.3.1.2 Math.LN10

10のnatural logarithmに対するNumber valueであり、およそ2.302585092994046です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.3.1.3 Math.LN2

2のnatural logarithmに対するNumber valueであり、およそ0.6931471805599453です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.3.1.4 Math.LOG10E

e、すなわちnatural logarithmsのbaseのbase-10 logarithmに対するNumber valueです;このvalueはおよそ0.4342944819032518です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

Note

Math.LOG10EのvalueはMath.LN10のvalueのreciprocalにおおよそ等しいです。

21.3.1.5 Math.LOG2E

e、すなわちnatural logarithmsのbaseのbase-2 logarithmに対するNumber valueです;このvalueはおよそ1.4426950408889634です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

Note

Math.LOG2EのvalueはMath.LN2のvalueのreciprocalにおおよそ等しいです。

21.3.1.6 Math.PI

π、すなわちcircleのcircumferenceとdiameterのratioに対するNumber valueであり、およそ3.1415926535897932です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.3.1.7 Math.SQRT1_2

½のsquare rootに対するNumber valueであり、およそ0.7071067811865476です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

Note

Math.SQRT1_2のvalueはMath.SQRT2のvalueのreciprocalにおおよそ等しいです。

21.3.1.8 Math.SQRT2

2のsquare rootに対するNumber valueであり、およそ1.4142135623730951です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

21.3.1.9 Math [ %Symbol.toStringTag% ]

%Symbol.toStringTag% propertyのinitial valueはString value "Math"です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }を持ちます。

21.3.2 Function Properties of the Math Object

Note

functions acosacoshasinasinhatanatanhatan2cbrtcoscoshexpexpm1hypotloglog1plog2log10powrandomsinsinhtan、およびtanhのbehaviourは、interestのあるboundary casesを表す特定のargument valuesに対してspecific resultsをrequireすることを除き、ここではpreciselyに指定されません。他のargument valuesについては、これらのfunctionsはfamiliar mathematical functionsのresultsへのapproximationsをcomputeすることを意図していますが、approximation algorithmsの選択にはある程度のlatitudeが許されます。general intentは、implementerが、与えられたhardware platform上のECMAScriptに対して、そのplatform上のC programmersが利用できる同じmathematical libraryを使用できるようにすることです。

algorithmsの選択はimplementationに任されますが、implementationsは、Sun Microsystemsのfreely distributable mathematical libraryであるfdlibmhttp://www.netlib.org/fdlibm)に含まれるIEEE 754-2019 arithmetic用のapproximation algorithmsを使用することがrecommendedされます(ただしこのstandardによって指定されるものではありません)。

21.3.2.1 Math.abs ( x )

このfunctionはxのabsolute valueを返します;resultはxと同じmagnitudeを持ちますが、positive signを持ちます。

これは呼び出されたとき、次のstepsを実行します:

  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 )

このfunctionはxのinverse cosineを返します。resultはradiansで表され、+0𝔽から𝔽(π)までのinclusive interval内にあります。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaNn > 1𝔽、またはn < -1𝔽のいずれかなら、NaNを返す。
  3. n1𝔽なら、+0𝔽を返す。
  4. (n)のinverse cosineを表すimplementation-approximated Number valueを返す。

21.3.2.3 Math.acosh ( x )

このfunctionはxのinverse hyperbolic cosineを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaNまたは+∞𝔽のいずれかなら、nを返す。
  3. n1𝔽なら、+0𝔽を返す。
  4. n < 1𝔽なら、NaNを返す。
  5. (n)のinverse hyperbolic cosineを表すimplementation-approximated Number valueを返す。

21.3.2.4 Math.asin ( x )

このfunctionはxのinverse sineを返します。resultはradiansで表され、𝔽(-π / 2)から𝔽(π / 2)までのinclusive interval内にあります。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaN+0𝔽、または-0𝔽のいずれかなら、nを返す。
  3. n > 1𝔽またはn < -1𝔽なら、NaNを返す。
  4. (n)のinverse sineを表すimplementation-approximated Number valueを返す。

21.3.2.5 Math.asinh ( x )

このfunctionはxのinverse hyperbolic sineを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nfiniteでない、またはn+0𝔽または-0𝔽のいずれかなら、nを返す。
  3. (n)のinverse hyperbolic sineを表すimplementation-approximated Number valueを返す。

21.3.2.6 Math.atan ( x )

このfunctionはxのinverse tangentを返します。resultはradiansで表され、𝔽(-π / 2)から𝔽(π / 2)までのinclusive interval内にあります。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaN+0𝔽、または-0𝔽のいずれかなら、nを返す。
  3. n+∞𝔽なら、π / 2を表すimplementation-approximated Number valueを返す。
  4. n-∞𝔽なら、-π / 2を表すimplementation-approximated Number valueを返す。
  5. (n)のinverse tangentを表すimplementation-approximated Number valueを返す。

21.3.2.7 Math.atanh ( x )

このfunctionはxのinverse hyperbolic tangentを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaN+0𝔽、または-0𝔽のいずれかなら、nを返す。
  3. n > 1𝔽またはn < -1𝔽なら、NaNを返す。
  4. n1𝔽なら、+∞𝔽を返す。
  5. n-1𝔽なら、-∞𝔽を返す。
  6. (n)のinverse hyperbolic tangentを表すimplementation-approximated Number valueを返す。

21.3.2.8 Math.atan2 ( y, x )

このfunctionはarguments yおよびxのquotient y / xのinverse tangentを返します。ここで、yおよびxのsignsはresultのquadrantをdetermineするために使用されます。2-argument inverse tangent functionでは、yという名前のargumentがfirstで、xという名前のargumentがsecondであることはintentionalかつtraditionalであることに注意してください。resultはradiansで表され、-πから+πまでのinclusive interval内にあります。

これは呼び出されたとき、次のstepsを実行します:

  1. nyを ? ToNumber(y) とする。
  2. nxを ? ToNumber(x) とする。
  3. nyNaNまたはnxNaNなら、NaNを返す。
  4. ny+∞𝔽なら、
    1. nx+∞𝔽なら、π / 4を表すimplementation-approximated Number valueを返す。
    2. nx-∞𝔽なら、3π / 4を表すimplementation-approximated Number valueを返す。
    3. π / 2を表すimplementation-approximated Number valueを返す。
  5. ny-∞𝔽なら、
    1. nx+∞𝔽なら、-π / 4を表すimplementation-approximated Number valueを返す。
    2. nx-∞𝔽なら、-3π / 4を表すimplementation-approximated Number valueを返す。
    3. -π / 2を表すimplementation-approximated Number valueを返す。
  6. ny+0𝔽なら、
    1. nx > +0𝔽またはnx+0𝔽なら、+0𝔽を返す。
    2. πを表すimplementation-approximated Number valueを返す。
  7. ny-0𝔽なら、
    1. nx > +0𝔽またはnx+0𝔽なら、-0𝔽を返す。
    2. -πを表すimplementation-approximated Number valueを返す。
  8. Assert: nyfiniteであり、+0𝔽でも-0𝔽でもない。
  9. ny > +0𝔽なら、
    1. nx+∞𝔽なら、+0𝔽を返す。
    2. nx-∞𝔽なら、πを表すimplementation-approximated Number valueを返す。
    3. nx+0𝔽または-0𝔽のいずれかなら、π / 2を表すimplementation-approximated Number valueを返す。
  10. ny < -0𝔽なら、
    1. nx+∞𝔽なら、-0𝔽を返す。
    2. nx-∞𝔽なら、-πを表すimplementation-approximated Number valueを返す。
    3. nx+0𝔽または-0𝔽のいずれかなら、-π / 2を表すimplementation-approximated Number valueを返す。
  11. Assert: nxfiniteであり、+0𝔽でも-0𝔽でもない。
  12. resultabs((ny) / (nx))のinverse tangentとする。
  13. nx < -0𝔽なら、
    1. ny > +0𝔽なら、resultをπ - resultに設定する。
    2. そうでなければ、resultを-π + resultに設定する。
  14. そうでなければ、
    1. ny < -0𝔽なら、resultを-resultに設定する。
  15. resultを表すimplementation-approximated Number valueを返す。

21.3.2.9 Math.cbrt ( x )

このfunctionはxのcube rootを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nfiniteでない、またはn+0𝔽または-0𝔽のいずれかなら、nを返す。
  3. (n)のcube rootを表すimplementation-approximated Number valueを返す。

21.3.2.10 Math.ceil ( x )

このfunctionは、x以上であるsmallest(-∞にclosest)integral Number valueを返します。xがすでにintegral Numberである場合、resultはxです。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nfiniteでない、またはn+0𝔽または-0𝔽のいずれかなら、nを返す。
  3. n < -0𝔽かつn > -1𝔽なら、-0𝔽を返す。
  4. nintegral Numberなら、nを返す。
  5. n以上であるsmallest(-∞にclosest)integral Number valueを返す。
Note

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

21.3.2.11 Math.clz32 ( x )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToUint32(x) とする。
  2. pnのunsigned 32-bit binary representationにおけるleading zero bitsの数とする。
  3. 𝔽(p)を返す。
Note

n+0𝔽または-0𝔽のいずれかである場合、このmethodは32𝔽を返します。nの32-bit binary encodingのmost significant bitが1である場合、このmethodは+0𝔽を返します。

21.3.2.12 Math.cos ( x )

このfunctionはxのcosineを返します。argumentはradiansで表されます。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nfiniteでないなら、NaNを返す。
  3. n+0𝔽または-0𝔽のいずれかなら、1𝔽を返す。
  4. (n)のcosineを表すimplementation-approximated Number valueを返す。

21.3.2.13 Math.cosh ( x )

このfunctionはxのhyperbolic cosineを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaNなら、NaNを返す。
  3. n+∞𝔽または-∞𝔽のいずれかなら、+∞𝔽を返す。
  4. n+0𝔽または-0𝔽のいずれかなら、1𝔽を返す。
  5. (n)のhyperbolic cosineを表すimplementation-approximated Number valueを返す。
Note

Math.cosh(x)のvalueは(Math.exp(x) + Math.exp(-x)) / 2のvalueと同じです。

21.3.2.14 Math.exp ( x )

このfunctionはxのexponential function(ex乗したもの。ここでeはnatural logarithmsのbase)を返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaNまたは+∞𝔽のいずれかなら、nを返す。
  3. n+0𝔽または-0𝔽のいずれかなら、1𝔽を返す。
  4. n-∞𝔽なら、+0𝔽を返す。
  5. (n)のexponential functionを表すimplementation-approximated Number valueを返す。

21.3.2.15 Math.expm1 ( x )

このfunctionはxのexponential function(ex乗したもの。ここでeはnatural logarithmsのbase)から1をsubtractしたresultを返します。resultは、xのvalueが0に近い場合でもaccurateになるようにcomputedされます。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaN+0𝔽-0𝔽、または+∞𝔽のいずれかなら、nを返す。
  3. n-∞𝔽なら、-1𝔽を返す。
  4. exp(n)のexponential functionとする。
  5. exp - 1を表すimplementation-approximated Number valueを返す。

21.3.2.16 Math.floor ( x )

このfunctionは、x以下であるgreatest(+∞にclosest)integral Number valueを返します。xがすでにintegral Numberである場合、resultはxです。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nfiniteでない、またはn+0𝔽または-0𝔽のいずれかなら、nを返す。
  3. n < 1𝔽かつn > +0𝔽なら、+0𝔽を返す。
  4. nintegral Numberなら、nを返す。
  5. n以下であるgreatest(+∞にclosest)integral Number valueを返す。
Note

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

21.3.2.17 Math.fround ( x )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaNなら、NaNを返す。
  3. n+0𝔽-0𝔽+∞𝔽、または-∞𝔽のいずれかなら、nを返す。
  4. n32を、roundTiesToEven modeを使用してnIEEE 754-2019 binary32 formatへconvertしたresultとする。
  5. n64を、n32IEEE 754-2019 binary64 formatへconvertしたresultとする。
  6. n64に対応するECMAScript Number valueを返す。

21.3.2.18 Math.f16round ( x )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaNなら、NaNを返す。
  3. n+0𝔽-0𝔽+∞𝔽、または-∞𝔽のいずれかなら、nを返す。
  4. n16を、roundTiesToEven modeを使用してnIEEE 754-2019 binary16 formatへconvertしたresultとする。
  5. n64を、n16IEEE 754-2019 binary64 formatへconvertしたresultとする。
  6. n64に対応するECMAScript Number valueを返す。
Note

このoperationは、binary32へcastしてからbinary16へcastすることと同じではありません。double-roundingの可能性があるためです:例えばnumber k = 1.00048828125000022204𝔽を考えると、Math.f16round(k)は1.0009765625𝔽ですが、Math.f16round(Math.fround(k))は1𝔽です。

すべてのplatformsがbinary64からbinary16へのcastingにnative supportを提供するわけではありません。これを提供できるlibrariesはさまざまあり、MIT-licensedのhalf libraryも含まれます。あるいは、まずroundTiesToEvenの下でbinary64からbinary32へcastし、そのresultがincorrect double-roundingにつながる可能性があるかどうかをcheckすることもできます。そのようなcasesは、binary32 valueのmantissaをadjustし、initial castをroundTiesToOddの下で実行した場合にproduceされるvalueになるようにすることで明示的にhandleできます。adjusted valueをroundTiesToEvenの下でbinary16へcastすると、correct valueがproduceされます。

21.3.2.19 Math.hypot ( ...args )

zero以上のargumentsが与えられると、このfunctionはそのargumentsのsquaresのsumのsquare rootを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. coercedを新しい空のListとする。
  2. argsの各要素argについて、以下を行う
    1. nを ? ToNumber(arg) とする。
    2. ncoercedへappendする。
  3. coercedの各要素numberについて、以下を行う
    1. number+∞𝔽または-∞𝔽のいずれかなら、+∞𝔽を返す。
  4. onlyZerotrueとする。
  5. coercedの各要素numberについて、以下を行う
    1. numberNaNなら、NaNを返す。
    2. number+0𝔽でも-0𝔽でもないなら、onlyZerofalseに設定する。
  6. onlyZerotrueなら、+0𝔽を返す。
  7. coercedの要素のmathematical valuesのsquaresのsumのsquare rootを表すimplementation-approximated Number valueを返す。

このfunctionの"length" propertyは2𝔽です。

Note

このfunctionが2つ以上のargumentsで呼び出されるときにnaive implementationsで発生しやすいoverflowsおよびunderflowsによるprecision lossを避けるよう、implementationsは注意すべきです。

21.3.2.20 Math.imul ( x, y )

このfunctionは呼び出されたとき、次のstepsを実行します:

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

21.3.2.21 Math.log ( x )

このfunctionはxのnatural logarithmを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaNまたは+∞𝔽のいずれかなら、nを返す。
  3. n1𝔽なら、+0𝔽を返す。
  4. n+0𝔽または-0𝔽のいずれかなら、-∞𝔽を返す。
  5. n < -0𝔽なら、NaNを返す。
  6. ln((n))を表すimplementation-approximated Number valueを返す。

21.3.2.22 Math.log1p ( x )

このfunctionは1 + xのnatural logarithmを返します。resultは、xのvalueがzeroに近い場合でもaccurateになるようにcomputedされます。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaN+0𝔽-0𝔽、または+∞𝔽のいずれかなら、nを返す。
  3. n-1𝔽なら、-∞𝔽を返す。
  4. n < -1𝔽なら、NaNを返す。
  5. ln(1 + (n))を表すimplementation-approximated Number valueを返す。

21.3.2.23 Math.log10 ( x )

このfunctionはxのbase 10 logarithmを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaNまたは+∞𝔽のいずれかなら、nを返す。
  3. n1𝔽なら、+0𝔽を返す。
  4. n+0𝔽または-0𝔽のいずれかなら、-∞𝔽を返す。
  5. n < -0𝔽なら、NaNを返す。
  6. log10((n))を表すimplementation-approximated Number valueを返す。

21.3.2.24 Math.log2 ( x )

このfunctionはxのbase 2 logarithmを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaNまたは+∞𝔽のいずれかなら、nを返す。
  3. n1𝔽なら、+0𝔽を返す。
  4. n+0𝔽または-0𝔽のいずれかなら、-∞𝔽を返す。
  5. n < -0𝔽なら、NaNを返す。
  6. log2((n))を表すimplementation-approximated Number valueを返す。

21.3.2.25 Math.max ( ...args )

zero以上のargumentsが与えられると、このfunctionはargumentsのそれぞれにToNumberをcallし、得られたvaluesのlargestを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. coercedを新しい空のListとする。
  2. argsの各要素argについて、以下を行う
    1. nを ? ToNumber(arg) とする。
    2. ncoercedへappendする。
  3. highest-∞𝔽とする。
  4. coercedの各要素numberについて、以下を行う
    1. numberNaNなら、NaNを返す。
    2. number+0𝔽であり、highest-0𝔽なら、highest+0𝔽に設定する。
    3. number > highestなら、highestnumberに設定する。
  5. highestを返す。
Note

largest valueをdetermineするためのvaluesのcomparisonは、+0𝔽-0𝔽より大きいとみなされることを除き、IsLessThan algorithmを使用して行われます。

このfunctionの"length" propertyは2𝔽です。

21.3.2.26 Math.min ( ...args )

zero以上のargumentsが与えられると、このfunctionはargumentsのそれぞれにToNumberをcallし、得られたvaluesのsmallestを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. coercedを新しい空のListとする。
  2. argsの各要素argについて、以下を行う
    1. nを ? ToNumber(arg) とする。
    2. ncoercedへappendする。
  3. lowest+∞𝔽とする。
  4. coercedの各要素numberについて、以下を行う
    1. numberNaNなら、NaNを返す。
    2. number-0𝔽であり、lowest+0𝔽なら、lowest-0𝔽に設定する。
    3. number < lowestなら、lowestnumberに設定する。
  5. lowestを返す。
Note

smallest valueをdetermineするためのvaluesのcomparisonは、+0𝔽-0𝔽より大きいとみなされることを除き、IsLessThan algorithmを使用して行われます。

このfunctionの"length" propertyは2𝔽です。

21.3.2.27 Math.pow ( base, exponent )

このfunctionは呼び出されたとき、次のstepsを実行します:

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

21.3.2.28 Math.random ( )

このfunctionは、positive signを持ち、+0𝔽以上かつ1𝔽未満であり、そのrange上でおおよそuniform distributionに従ってrandomlyまたはpseudo randomlyに選ばれたNumber valueを、implementation-defined algorithmまたはstrategyを使用して返します。

distinct realmsに対して作成された各Math.random functionは、successive callsからdistinct sequence of valuesをproduceしなければなりません。

21.3.2.29 Math.round ( x )

このfunctionは、xにclosestでありintegralであるNumber valueを返します。2つのintegral Numbersxにequally closeである場合、resultは+∞にcloserなNumber valueです。xがすでにintegralである場合、resultはxです。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nfiniteでない、またはnintegral Numberなら、nを返す。
  3. n < 0.5𝔽かつn > +0𝔽なら、+0𝔽を返す。
  4. n < -0𝔽かつn-0.5𝔽なら、-0𝔽を返す。
  5. nにclosestなintegral Numberを返し、tieの場合は+∞にcloserなNumberを優先する。
Note 1

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

Note 2

Math.round(x)のvalueは、常にMath.floor(x + 0.5)のvalueと同じとは限りません。x-0𝔽である場合、またはx-0𝔽より小さく、かつ-0.5𝔽以上である場合、Math.round(x)-0𝔽を返しますが、Math.floor(x + 0.5)+0𝔽を返します。Math.round(x)はまた、x + 0.5をcomputeするときのinternal roundingのため、Math.floor(x + 0.5)のvalueと異なる場合があります。

21.3.2.30 Math.sign ( x )

このfunctionはxのsignを返し、xがpositive、negative、またはzeroであるかを示します。

これは呼び出されたとき、次のstepsを実行します:

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

21.3.2.31 Math.sin ( x )

このfunctionはxのsineを返します。argumentはradiansで表されます。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaN+0𝔽、または-0𝔽のいずれかなら、nを返す。
  3. n+∞𝔽または-∞𝔽のいずれかなら、NaNを返す。
  4. (n)のsineを表すimplementation-approximated Number valueを返す。

21.3.2.32 Math.sinh ( x )

このfunctionはxのhyperbolic sineを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nfiniteでない、またはn+0𝔽または-0𝔽のいずれかなら、nを返す。
  3. (n)のhyperbolic sineを表すimplementation-approximated Number valueを返す。
Note

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

21.3.2.33 Math.sqrt ( x )

このfunctionはxのsquare rootを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaN+0𝔽-0𝔽、または+∞𝔽のいずれかなら、nを返す。
  3. n < -0𝔽なら、NaNを返す。
  4. 𝔽((n)のsquare root)を返す。

21.3.2.34 Math.sumPrecise ( items )

Numbersのiterableが与えられると、このfunctionはiterable内の各valueをsumし、それらのsumを返します。何らかのvalueがNumberでない場合、TypeError例外をthrowします。

これは呼び出されたとき、次のstepsを実行します:

  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: このstepは実際には到達しないことが期待されており、implementationsがこの仕様に違反することなくinputsが“reasonably sized”であることに依存できるようにするためだけに含まれる。
        2. errorThrowCompletion(a newly created RangeError object)とする。
        3. IteratorClose(iteratorRecord, error)を返す。
      2. nextがNumberでないなら、
        1. errorThrowCompletion(a newly created TypeError object)とする。
        2. IteratorClose(iteratorRecord, error)を返す。
      3. nnextとする。
      4. statenot-a-numberでないなら、
        1. nNaNなら、
          1. 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のvalueは、さまざまなalgorithmsによってarbitrary-precision arithmeticなしでcomputedできます。その1つは、Jonathan Richard ShewchukによるAdaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicatesに示されている“Grow-Expansion” algorithmです。よりrecentなalgorithmは“Fast exact summation using small and large superaccumulators”に示されており、そのcodeはhttps://gitlab.com/radfordneal/xsumで利用できます。

21.3.2.35 Math.tan ( x )

このfunctionはxのtangentを返します。argumentはradiansで表されます。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaN+0𝔽、または-0𝔽のいずれかなら、nを返す。
  3. n+∞𝔽または-∞𝔽のいずれかなら、NaNを返す。
  4. (n)のtangentを表すimplementation-approximated Number valueを返す。

21.3.2.36 Math.tanh ( x )

このfunctionはxのhyperbolic tangentを返します。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nNaN+0𝔽、または-0𝔽のいずれかなら、nを返す。
  3. n+∞𝔽なら、1𝔽を返す。
  4. n-∞𝔽なら、-1𝔽を返す。
  5. (n)のhyperbolic tangentを表すimplementation-approximated Number valueを返す。
Note

Math.tanh(x)のvalueは(Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x))のvalueと同じです。

21.3.2.37 Math.trunc ( x )

このfunctionはnumber xのintegral partを返し、fractional digitsをremoveします。xがすでにintegralである場合、resultはxです。

これは呼び出されたとき、次のstepsを実行します:

  1. nを ? ToNumber(x) とする。
  2. nfiniteでない、またはn+0𝔽または-0𝔽のいずれかなら、nを返す。
  3. n < 1𝔽かつn > +0𝔽なら、+0𝔽を返す。
  4. n < -0𝔽かつn > -1𝔽なら、-0𝔽を返す。
  5. +0𝔽の方向にnにnearestなintegral Numberを返す。

21.4 Date Objects

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

以下の抽象操作は、time value21.4.1.1で定義)を操作する。いずれの場合も、これらの関数のいずれかに対する引数が NaN であれば、結果は NaN になることに注意されたい。

21.4.1.1 Time Value と時間範囲

ECMAScript における時間の測定は POSIX における時間の測定に類似しており、特に先発グレゴリオ暦、1970 年 1 月 1 日 UTC の開始時の午前 0 時をエポックとすること、およびすべての日を正確に 86,400 秒(各秒は 1000 ミリ秒)から構成されるものとして扱うという定義を共有している。

ECMAScript の time value は Number であり、ミリ秒精度で時点を表す有限の整数 Number、または特定の時点を表さない NaN のいずれかである。msPerDay の整数倍である time value(すなわち、ある整数 d に対して msPerDay × d であるもの)は、エポックから d 日の完全な UTC 日が経過した後の UTC 日の開始時点(d が負の場合はエポックより前)を表す。それ以外のすべての有限の time value tv は、そのような倍数である直前の最大の time value s を基準として定義され、s と同じ UTC 日の中で、それより (tv - s) ミリ秒後に生じる時点を表す。

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

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

1970 年 1 月 1 日 UTC の開始時の午前 0 時という正確な時点は、time value +0𝔽 で表される。

Note

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

先発グレゴリオ暦の 400 年周期には 97 回のうるう年が含まれる。したがって、1 年の平均は 365.2425 日、すなわち 31,556,952,000 ミリ秒となる。このため、Number がミリ秒精度で正確に表現できる最大範囲は、1970 年を基準として約 -285,426 年から 285,426 年までである。この節で規定する time value がサポートするより小さい範囲は、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
nsPerSecond = 106 × msPerSecond = 109
nsPerMillisecond = 106
nsPerMicrosecond = 103

21.4.1.3 Day ( tv )

The abstract operation Day takes argument tv (有限の time value) and returns 整数. tv が属する日の番号を返す。 It performs the following steps when called:

  1. floor((tv) / msPerDay) を返す。

21.4.1.4 TimeWithinDay ( tv )

The abstract operation TimeWithinDay takes argument tv (有限の time value) and returns 0(含む)から msPerDay(含まない)までの区間内の整数. tv が属する日の開始からのミリ秒数を返す。 It performs the following steps when called:

  1. (tv) modulo msPerDay を返す。

21.4.1.5 DayFromYear ( y )

The abstract operation DayFromYear takes argument y (整数) and returns 整数. 年 y の最初の日の日番号を返す。 It performs the following steps when called:

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

21.4.1.6 TimeFromYear ( y )

The abstract operation TimeFromYear takes argument y (整数) and returns time value. 年 y の開始時点の time value を返す。 It performs the following steps when called:

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

21.4.1.7 YearFromTime ( tv )

The abstract operation YearFromTime takes argument tv (有限の time value) and returns 整数. tv が属する年を返す。 It performs the following steps when called:

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

21.4.1.8 DayWithinYear ( tv )

The abstract operation DayWithinYear takes argument tv (有限の time value) and returns 0 から 365 までの両端を含む区間内の整数. It performs the following steps when called:

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

21.4.1.9 InLeapYear ( tv )

The abstract operation InLeapYear takes argument tv (有限の time value) and returns 0 または 1. tv が閏年内にある場合は 1 を、それ以外の場合は 0 を返す。 It performs the following steps when called:

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

21.4.1.10 MonthFromTime ( tv )

The abstract operation MonthFromTime takes argument tv (有限の time value) and returns 0 から 11 までの両端を含む区間内の整数. tv が属する月を識別する整数を返す。月の値 0 は1月、1 は2月、2 は3月、3 は4月、4 は5月、5 は6月、6 は7月、7 は8月、8 は9月、9 は10月、10 は11月、11 は12月を指定する。MonthFromTime(+0𝔽) = 0 であり、これは1970年1月1日木曜日に対応することに注意すること。 It performs the following steps when called:

  1. inLeapYearInLeapYear(tv) とする。
  2. dayWithinYearDayWithinYear(tv) とする。
  3. dayWithinYear < 31 の場合、0 を返す。
  4. dayWithinYear < 59 + inLeapYear の場合、1 を返す。
  5. dayWithinYear < 90 + inLeapYear の場合、2 を返す。
  6. dayWithinYear < 120 + inLeapYear の場合、3 を返す。
  7. dayWithinYear < 151 + inLeapYear の場合、4 を返す。
  8. dayWithinYear < 181 + inLeapYear の場合、5 を返す。
  9. dayWithinYear < 212 + inLeapYear の場合、6 を返す。
  10. dayWithinYear < 243 + inLeapYear の場合、7 を返す。
  11. dayWithinYear < 273 + inLeapYear の場合、8 を返す。
  12. dayWithinYear < 304 + inLeapYear の場合、9 を返す。
  13. dayWithinYear < 334 + inLeapYear の場合、10 を返す。
  14. 表明: dayWithinYear < 365 + inLeapYear
  15. 11 を返す。

21.4.1.11 DateFromTime ( tv )

The abstract operation DateFromTime takes argument tv (有限の time value) and returns 1 から 31 までの両端を含む区間内の整数. tv が属する月の日を返す。 It performs the following steps when called:

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

21.4.1.12 WeekDay ( tv )

The abstract operation WeekDay takes argument tv (有限の time value) and returns 0 から 6 までの両端を含む区間内の整数. tv が属する曜日を識別する整数を返す。曜日の値 0 は日曜日、1 は月曜日、2 は火曜日、3 は水曜日、4 は木曜日、5 は金曜日、6 は土曜日を指定する。WeekDay(+0𝔽) = 4 であり、これは1970年1月1日木曜日に対応することに注意すること。 It performs the following steps when called:

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

21.4.1.13 HourFromTime ( tv )

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

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

21.4.1.14 MinFromTime ( tv )

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

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

21.4.1.15 SecFromTime ( tv )

The abstract operation SecFromTime takes argument tv (有限の time value) and returns 0 から 59 までの両端を含む区間内の整数. tv が属する分の秒を返す。 It performs the following steps when called:

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

21.4.1.16 MillisecFromTime ( tv )

The abstract operation MillisecFromTime takes argument tv (有限の time value) and returns 0 から 999 までの両端を含む区間内の整数. tv が属する秒のミリ秒を返す。 It performs the following steps when called:

  1. (tv) modulo msPerSecond を返す。

21.4.1.17 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) × nsPerMillisecond + microsecond × nsPerMicrosecond + nanosecond) を返す。

21.4.1.18 タイムゾーン識別子

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

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

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

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

21.4.1.19 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 内の各値は、指定された ISO 8601 暦の日付、および timeZoneIdentifier によって識別される名前付きタイムゾーンの壁時計時刻に対応する、エポックからのナノ秒数を表す。

入力が負のタイムゾーン遷移によって複数回発生する現地時刻を表す場合(たとえば、夏時間が終了する場合や、タイムゾーン規則の変更によってタイムゾーンオフセットが減少する場合)、返される 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) は長さ 2 の List を返し、その第 1 要素は 05:30 UTC(UTC オフセット -04:00 の米国東部夏時間 01:30 に対応)を表し、第 2 要素は 06:30 UTC(UTC オフセット -05:00 の米国東部標準時 01:30 に対応)を表す。

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

21.4.1.20 GetNamedTimeZoneOffsetNanoseconds ( timeZoneIdentifier, epochNanoseconds )

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

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

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

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

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

21.4.1.21 Time Zone Identifier Record

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

Time Zone Identifier Record は、Table 60に示すフィールドを持つ。

Table 60: Time Zone Identifier Record のフィールド
フィールド名 意味
[[Identifier]] String 実装によってサポートされる、利用可能な名前付きタイムゾーン識別子
[[PrimaryIdentifier]] String [[Identifier]] の解決先となるプライマリタイムゾーン識別子
Note

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

21.4.1.22 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. primary を、identifier に関連付けられたプライマリタイムゾーン識別子に設定する。
      2. NOTE: 実装は、プライマリタイムゾーン識別子を取得するために identifier を反復的に解決する必要がある場合がある。
    3. recordTime Zone Identifier Record { [[Identifier]]: identifier, [[PrimaryIdentifier]]: primary } とする。
    4. recordresult に追加する。
  5. Assert: result は、record.[[Identifier]]"UTC" であり、かつ record.[[PrimaryIdentifier]]"UTC" である Time Zone Identifier Record record を含む。
  6. result を返す。

21.4.1.23 SystemTimeZoneIdentifier ( )

The implementation-defined abstract operation SystemTimeZoneIdentifier takes no arguments and returns String. これは、ホスト環境の現在のタイムゾーンを表す 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.24 LocalTime ( tv )

The abstract operation LocalTime takes argument tv (有限の time value) and returns 整数の Number. これは、tv を UTC から現地時刻に変換する。 tv において有効な標準時および夏時間に関する地域の政治的規則を使用して、この節で規定する方法で結果を決定するべきである。 It performs the following steps when called:

  1. systemTimeZoneIdentifierSystemTimeZoneIdentifier() とする。
  2. IsTimeZoneOffsetString(systemTimeZoneIdentifier) が true である場合、
    1. offsetNsParseTimeZoneOffsetString(systemTimeZoneIdentifier) とする。
  3. それ以外の場合、
    1. offsetNsGetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, ((tv) × nsPerMillisecond)) とする。
  4. offsetMstruncate(offsetNs / nsPerMillisecond) とする。
  5. tv + 𝔽(offsetMs) を返す。
Note 1

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

Note 2

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

Note 3

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

LocalTime(UTC(tvlocal)) は必ずしも常に tvlocal と等しいとは限らない。これに対応して、UTC(LocalTime(tvUTC)) も必ずしも常に tvUTC と等しいとは限らない。

21.4.1.25 UTC ( t )

The abstract operation UTC takes argument t (Number) and returns time value. t をローカル時刻から UTC time value に変換する。 結果を決定するには、この節で指定されている方法で、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), MillisecFromTime(t), 0, 0) とする。
    2. 注記: 以下の手順により、t が負のタイムゾーン遷移時に複数回繰り返されるローカル時刻(例えば、夏時間が終了するとき、またはタイムゾーン規則の変更によりタイムゾーンオフセットが減少するとき)、あるいは正のタイムゾーン遷移時にスキップされるローカル時刻(例えば、夏時間が開始するとき、またはタイムゾーン規則の変更によりタイムゾーンオフセットが増加するとき)を表す場合に、t が遷移前のタイムゾーンオフセットを使用して解釈されることを保証する。
    3. possibleInstants が空でない場合、
      1. disambiguatedInstantpossibleInstants[0] とする。
    4. それ以外の場合、
      1. 注記: t は正のタイムゾーン遷移時にスキップされるローカル時刻(例えば、夏時間の開始または UTC オフセットを増加させるタイムゾーン規則の変更によるもの)を表す。
      2. possibleInstantsBeforeGetNamedTimeZoneEpochNanoseconds(systemTimeZoneIdentifier, YearFromTime(tBefore), MonthFromTime(tBefore) + 1, DateFromTime(tBefore), HourFromTime(tBefore), MinFromTime(tBefore), SecFromTime(tBefore), MillisecFromTime(tBefore), 0, 0) とする。ここで、tBeforepossibleInstantsBefore が空でない(すなわち、tBefore が遷移前の最後のローカル時刻を表す)ような t 未満の最大の整数 Number である。
      3. disambiguatedInstantpossibleInstantsBefore の最後の要素とする。
    5. offsetNsGetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, disambiguatedInstant) とする。
  5. offsetMstruncate(offsetNs / nsPerMillisecond) とする。
  6. t - 𝔽(offsetMs) を返す。

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

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

Note 1

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

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

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

Note 2

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

21.4.1.26 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.27 MakeDay ( year, month, date )

The abstract operation MakeDay takes arguments year (Number), month (Number), and date (Number) and returns 有限の Number または 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. ym𝔽(y) + 𝔽(floor(m / 12)) とする。
  6. ym が有限でない場合、NaN を返す。
  7. mnm modulo 12 とする。
  8. YearFromTime(tv) = (ym)、MonthFromTime(tv) = mn、かつ DateFromTime(tv) = 1 となる有限の time value tv を見つける。ただし、これが不可能な場合(いずれかの引数が範囲外であるため)は、NaN を返す。
  9. 𝔽(Day(tv)) + 𝔽(dt) - 1𝔽 を返す。

21.4.1.28 MakeDate ( day, time )

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

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

21.4.1.29 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.30 TimeClip ( time )

The abstract operation TimeClip takes argument time (Number) and returns 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.31 日時文字列形式

ECMAScript は、ISO 8601 暦の日付の拡張形式を簡略化した日時の文字列交換形式を定義する。その形式は次のとおりである。YYYY-MM-DDTHH:mm:ss.sssZ

各要素は次のとおりである。

YYYY は、先発グレゴリオ暦の年を 0000 から 9999 までの 4 桁の十進数字、または "+""-" の後に 6 桁の十進数字が続く拡張年として表す。
- "-"(ハイフン)が文字列内に文字どおり 2 回出現する。
MM は、年の月を 01(1 月)から 12(12 月)までの 2 桁の十進数字で表す。
DD は、月の日を 01 から 31 までの 2 桁の十進数字で表す。
T 時刻要素の開始を示すため、"T" が文字列内に文字どおり出現する。
HH は、午前 0 時から経過した完全な時間数を 00 から 24 までの 2 桁の十進数字で表す。
: ":"(コロン)が文字列内に文字どおり 2 回出現する。
mm は、時の開始から経過した完全な分数を 00 から 59 までの 2 桁の十進数字で表す。
ss は、分の開始から経過した完全な秒数を 00 から 59 までの 2 桁の十進数字で表す。
. "."(ピリオド)が文字列内に文字どおり出現する。
sss は、秒の開始から経過した完全なミリ秒数を 3 桁の十進数字で表す。
Z は、"Z"(オフセットなしの UTC)または "+""-" の後に時刻表現 HH:mm が続く形式で指定される UTC オフセット表現である(それぞれ UTC より進んでいる、または遅れている現地時刻を示すためのタイムゾーンオフセット文字列形式のサブセット)

この形式には、日付のみの次の形式が含まれる。

YYYY
YYYY-MM
YYYY-MM-DD
        

また、上記の日付のみの形式のいずれかの直後に、次の時刻形式のいずれかが続き、任意で UTC オフセット表現が付加される「日時」形式も含まれる。

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

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

Note 1

すべての日は午前 0 時に始まり、午前 0 時に終わるため、1 つの日付に関連付けられる 2 つの午前 0 時を区別するために、00:0024:00 という 2 つの表記を使用できる。これは、次の 2 つの表記が正確に同じ時点を指すことを意味する。1995-02-04T24:00 および 1995-02-05T00:00

Note 2

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

21.4.1.31.1 拡張年

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

Note

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

-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.32 タイムゾーンオフセット文字列形式

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.32.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.32.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 の適用によって精度が失われることはない。
  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 × MinutesPerHour + minutes) × SecondsPerMinute + seconds) × nsPerSecond + nanoseconds) を返す。

21.4.2 The Date Constructor

Date constructorは:

  • %Date%です。
  • global object"Date" propertyのinitial valueです。
  • constructorとして呼び出されたとき、新しいDateを作成およびinitializeします。
  • constructorとしてではなくfunctionとして呼び出されたとき、current time(UTC)を表すStringを返します。
  • そのbehaviourがargumentsのnumberおよびtypesに基づいて異なるfunctionです。
  • class definitionのextends clauseのvalueとして使用できます。指定されたDate behaviourをinheritしようとするsubclass constructorsは、[[DateValue]] internal slotを持つsubclass instanceを作成およびinitializeするために、Date constructorへのsuper callを含まなければなりません。

21.4.2.1 Date ( ...values )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. NewTargetがundefinedなら、
    1. nowをcurrent timeをidentifyするtime value(UTC)とする。
    2. ToDateString(now)を返す。
  2. numberOfArgsvalues内のelementsの数とする。
  3. numberOfArgs = 0なら、
    1. dvをcurrent timeをidentifyするtime value(UTC)とする。
  4. そうでなく、numberOfArgs = 1なら、
    1. valuevalues[0]とする。
    2. valueがObjectであり、value[[DateValue]] internal slotを持つなら、
      1. tvvalue.[[DateValue]]とする。
    3. そうでなければ、
      1. vを ? ToPrimitive(value) とする。
      2. vがStringなら、
        1. Assert: vはStringであるため、next stepはabrupt completionを返すことはない。
        2. tvを、parse method(21.4.3.2)の場合とexactly same mannerで、vをdateとしてparsingしたresultとする。
      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 Properties of the Date Constructor

Date constructorは:

  • valueが%Function.prototype%である[[Prototype]] internal slotを持ちます。
  • valueが7𝔽である"length" propertyを持ちます。
  • 次のpropertiesを持ちます:

21.4.3.1 Date.now ( )

このfunctionは、それへのcallのoccurrenceのUTC dateおよびtimeをdesignateするtime valueを返します。

21.4.3.2 Date.parse ( string )

このfunctionは、そのargumentにToString operatorをapplyします。ToStringabrupt completionとなった場合、Completion Recordがimmediatelyに返されます。そうでなければ、このfunctionは得られたStringをdateおよびtimeとしてinterpretします;これは、dateおよびtimeに対応するUTC time valueであるNumberを返します。Stringのcontentsに応じて、Stringはlocal time、UTC time、またはsome other time zoneのtimeとしてinterpretedされ得ます。functionはまず、expanded yearsを含め、Date Time String Format(21.4.1.31)でdescribedされたformatに従ってStringをparseしようとします。Stringがそのformatにconformしない場合、functionは任意のimplementation-specific heuristicsまたはimplementation-specific date formatsにfall backしてもよいです。unrecognizableである、またはout-of-bounds format element valuesを含むStringsは、このfunctionにNaNを返させなければなりません。

StringがDate Time String Formatにconformする場合、absent format elementsのplaceにはsubstitute valuesが入ります。MMまたはDD elementsがabsentである場合、"01"が使用されます。HHmm、またはss elementsがabsentである場合、"00"が使用されます。sss elementがabsentである場合、"000"が使用されます。UTC offset representationがabsentである場合、date-only formsはUTC timeとしてinterpretedされ、date-time formsはlocal timeとしてinterpretedされます。

xが、ECMAScriptの特定のimplementation内でmilliseconds amountがzeroである任意のDateである場合、referencedされるすべてのpropertiesがinitial valuesを持つなら、以下のexpressionsはすべて、そのimplementation内でsame numeric valueをproduceすべきです:

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

しかし、expression

Date.parse(x.toLocaleString())

は、preceding three expressionsとsame Number valueをproduceすることはrequiredではなく、generalに、このfunctionによってproduceされるvalueは、Date Time String Format(21.4.1.31)にconformせず、かつそのimplementationでtoStringまたはtoUTCString methodによってproduceされ得ない任意のString valueが与えられた場合、implementation-definedです。

21.4.3.3 Date.prototype

Date.prototypeのinitial valueはDate prototype objectです。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

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

このfunctionは呼び出されたとき、次のstepsを実行します:

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

このfunctionの"length" propertyは7𝔽です。

Note

このfunctionはDate constructorと2つの点で異なります:これはDateを作成するのではなくNumberとしてtime valueを返し、argumentsをlocal timeとしてではなくUTCとしてinterpretします。

21.4.4 Properties of the Date Prototype Object

Date prototype objectは:

  • %Date.prototype%です。
  • それ自体がordinary objectです。
  • Date instanceではなく、[[DateValue]] internal slotを持ちません。
  • valueが%Object.prototype%である[[Prototype]] internal slotを持ちます。

明示的に別途定義されない限り、以下で定義されるDate prototype objectのmethodsはgenericではなく、それらに渡されるthis valueは、time valueへinitialized済みの[[DateValue]] internal slotを持つobjectでなければなりません。

21.4.4.1 Date.prototype.constructor

Date.prototype.constructorのinitial valueは%Date%です。

21.4.4.2 Date.prototype.getDate ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(DateFromTime(LocalTime(tv))) を返す。

21.4.4.3 Date.prototype.getDay ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(WeekDay(LocalTime(tv))) を返す。

21.4.4.4 Date.prototype.getFullYear ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(YearFromTime(LocalTime(tv))) を返す。

21.4.4.5 Date.prototype.getHours ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(HourFromTime(LocalTime(tv))) を返す。

21.4.4.6 Date.prototype.getMilliseconds ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(MillisecFromTime(LocalTime(tv))) を返す。

21.4.4.7 Date.prototype.getMinutes ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(MinFromTime(LocalTime(tv))) を返す。

21.4.4.8 Date.prototype.getMonth ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(MonthFromTime(LocalTime(tv))) を返す。

21.4.4.9 Date.prototype.getSeconds ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(SecFromTime(LocalTime(tv))) を返す。

21.4.4.10 Date.prototype.getTime ( )

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

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

21.4.4.11 Date.prototype.getTimezoneOffset ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. (tv - LocalTime(tv)) / 𝔽(msPerMinute) を返す。

21.4.4.12 Date.prototype.getUTCDate ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(DateFromTime(tv)) を返す。

21.4.4.13 Date.prototype.getUTCDay ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(WeekDay(tv)) を返す。

21.4.4.14 Date.prototype.getUTCFullYear ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(YearFromTime(tv)) を返す。

21.4.4.15 Date.prototype.getUTCHours ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(HourFromTime(tv)) を返す。

21.4.4.16 Date.prototype.getUTCMilliseconds ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(MillisecFromTime(tv)) を返す。

21.4.4.17 Date.prototype.getUTCMinutes ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(MinFromTime(tv)) を返す。

21.4.4.18 Date.prototype.getUTCMonth ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(MonthFromTime(tv)) を返す。

21.4.4.19 Date.prototype.getUTCSeconds ( )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、NaN を返す。
  5. 𝔽(SecFromTime(tv)) を返す。

21.4.4.20 Date.prototype.setDate ( date )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. dt を ? ToNumber(date) とする。
  5. tvNaN の場合、NaN を返す。
  6. tvLocalTime(tv) に設定する。
  7. newDateMakeDate(MakeDay(𝔽(YearFromTime(tv)), 𝔽(MonthFromTime(tv)), dt), 𝔽(TimeWithinDay(tv))) とする。
  8. uTimeClip(UTC(newDate)) とする。
  9. dateObj.[[DateValue]]u に設定する。
  10. u を返す。

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

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. y を ? ToNumber(year) とする。
  5. tvNaN の場合、tv+0𝔽 に設定する。それ以外の場合、tvLocalTime(tv) に設定する。
  6. month が存在する場合、m を ? ToNumber(month) とする。それ以外の場合、m𝔽(MonthFromTime(tv)) とする。
  7. date が存在する場合、dt を ? ToNumber(date) とする。それ以外の場合、dt𝔽(DateFromTime(tv)) とする。
  8. newDateMakeDate(MakeDay(y, m, dt), 𝔽(TimeWithinDay(tv))) とする。
  9. uTimeClip(UTC(newDate)) とする。
  10. dateObj.[[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. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. h を ? ToNumber(hour) とする。
  5. min が存在する場合、m を ? ToNumber(min) とする。
  6. sec が存在する場合、s を ? ToNumber(sec) とする。
  7. ms が存在する場合、milli を ? ToNumber(ms) とする。
  8. tvNaN の場合、NaN を返す。
  9. tvLocalTime(tv) に設定する。
  10. min が存在しない場合、m𝔽(MinFromTime(tv)) とする。
  11. sec が存在しない場合、s𝔽(SecFromTime(tv)) とする。
  12. ms が存在しない場合、milli𝔽(MillisecFromTime(tv)) とする。
  13. dateMakeDate(𝔽(Day(tv)), MakeTime(h, m, s, milli)) とする。
  14. uTimeClip(UTC(date)) とする。
  15. dateObj.[[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. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. ms を ? ToNumber(ms) に設定する。
  5. tvNaN の場合、NaN を返す。
  6. tvLocalTime(tv) に設定する。
  7. timeMakeTime(𝔽(HourFromTime(tv)), 𝔽(MinFromTime(tv)), 𝔽(SecFromTime(tv)), ms) とする。
  8. uTimeClip(UTC(MakeDate(𝔽(Day(tv)), time))) とする。
  9. dateObj.[[DateValue]]u に設定する。
  10. u を返す。

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

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. m を ? ToNumber(min) とする。
  5. sec が存在する場合、s を ? ToNumber(sec) とする。
  6. ms が存在する場合、milli を ? ToNumber(ms) とする。
  7. tvNaN の場合、NaN を返す。
  8. tvLocalTime(tv) に設定する。
  9. sec が存在しない場合、s𝔽(SecFromTime(tv)) とする。
  10. ms が存在しない場合、milli𝔽(MillisecFromTime(tv)) とする。
  11. dateMakeDate(𝔽(Day(tv)), MakeTime(𝔽(HourFromTime(tv)), m, s, milli)) とする。
  12. uTimeClip(UTC(date)) とする。
  13. dateObj.[[DateValue]]u に設定する。
  14. u を返す。

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

Note

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

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

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. m を ? ToNumber(month) とする。
  5. date が存在する場合、dt を ? ToNumber(date) とする。
  6. tvNaN の場合、NaN を返す。
  7. tvLocalTime(tv) に設定する。
  8. date が存在しない場合、dt𝔽(DateFromTime(tv)) とする。
  9. newDateMakeDate(MakeDay(𝔽(YearFromTime(tv)), m, dt), 𝔽(TimeWithinDay(tv))) とする。
  10. uTimeClip(UTC(newDate)) とする。
  11. dateObj.[[DateValue]]u に設定する。
  12. u を返す。

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

Note

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

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

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. s を ? ToNumber(sec) とする。
  5. ms が存在する場合、milli を ? ToNumber(ms) とする。
  6. tvNaN の場合、NaN を返す。
  7. tvLocalTime(tv) に設定する。
  8. ms が存在しない場合、milli𝔽(MillisecFromTime(tv)) とする。
  9. dateMakeDate(𝔽(Day(tv)), MakeTime(𝔽(HourFromTime(tv)), 𝔽(MinFromTime(tv)), s, milli)) とする。
  10. uTimeClip(UTC(date)) とする。
  11. dateObj.[[DateValue]]u に設定する。
  12. u を返す。

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

Note

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

21.4.4.27 Date.prototype.setTime ( time )

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

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

21.4.4.28 Date.prototype.setUTCDate ( date )

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. dt を ? ToNumber(date) とする。
  5. tvNaN の場合、NaN を返す。
  6. newDateMakeDate(MakeDay(𝔽(YearFromTime(tv)), 𝔽(MonthFromTime(tv)), dt), 𝔽(TimeWithinDay(tv))) とする。
  7. vTimeClip(newDate) とする。
  8. dateObj.[[DateValue]]v に設定する。
  9. v を返す。

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

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、tv+0𝔽 に設定する。
  5. y を ? ToNumber(year) とする。
  6. month が存在する場合、m を ? ToNumber(month) とする。それ以外の場合、m𝔽(MonthFromTime(tv)) とする。
  7. date が存在する場合、dt を ? ToNumber(date) とする。それ以外の場合、dt𝔽(DateFromTime(tv)) とする。
  8. newDateMakeDate(MakeDay(y, m, dt), 𝔽(TimeWithinDay(tv))) とする。
  9. vTimeClip(newDate) とする。
  10. dateObj.[[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. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. h を ? ToNumber(hour) とする。
  5. min が存在する場合、m を ? ToNumber(min) とする。
  6. sec が存在する場合、s を ? ToNumber(sec) とする。
  7. ms が存在する場合、milli を ? ToNumber(ms) とする。
  8. tvNaN の場合、NaN を返す。
  9. min が存在しない場合、m𝔽(MinFromTime(tv)) とする。
  10. sec が存在しない場合、s𝔽(SecFromTime(tv)) とする。
  11. ms が存在しない場合、milli𝔽(MillisecFromTime(tv)) とする。
  12. dateMakeDate(𝔽(Day(tv)), MakeTime(h, m, s, milli)) とする。
  13. vTimeClip(date) とする。
  14. dateObj.[[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. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. ms を ? ToNumber(ms) に設定する。
  5. tvNaN の場合、NaN を返す。
  6. timeMakeTime(𝔽(HourFromTime(tv)), 𝔽(MinFromTime(tv)), 𝔽(SecFromTime(tv)), ms) とする。
  7. vTimeClip(MakeDate(𝔽(Day(tv)), time)) とする。
  8. dateObj.[[DateValue]]v に設定する。
  9. v を返す。

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

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. m を ? ToNumber(min) とする。
  5. sec が存在する場合、s を ? ToNumber(sec) とする。
  6. ms が存在する場合、milli を ? ToNumber(ms) とする。
  7. tvNaN の場合、NaN を返す。
  8. sec が存在しない場合、s𝔽(SecFromTime(tv)) とする。
  9. ms が存在しない場合、milli𝔽(MillisecFromTime(tv)) とする。
  10. dateMakeDate(𝔽(Day(tv)), MakeTime(𝔽(HourFromTime(tv)), m, s, milli)) とする。
  11. vTimeClip(date) とする。
  12. dateObj.[[DateValue]]v に設定する。
  13. v を返す。

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

Note

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

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

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. m を ? ToNumber(month) とする。
  5. date が存在する場合、dt を ? ToNumber(date) とする。
  6. tvNaN の場合、NaN を返す。
  7. date が存在しない場合、dt𝔽(DateFromTime(tv)) とする。
  8. newDateMakeDate(MakeDay(𝔽(YearFromTime(tv)), m, dt), 𝔽(TimeWithinDay(tv))) とする。
  9. vTimeClip(newDate) とする。
  10. dateObj.[[DateValue]]v に設定する。
  11. v を返す。

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

Note

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

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

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

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. s を ? ToNumber(sec) とする。
  5. ms が存在する場合、milli を ? ToNumber(ms) とする。
  6. tvNaN の場合、NaN を返す。
  7. ms が存在しない場合、milli𝔽(MillisecFromTime(tv)) とする。
  8. dateMakeDate(𝔽(Day(tv)), MakeTime(𝔽(HourFromTime(tv)), 𝔽(MinFromTime(tv)), s, milli)) とする。
  9. vTimeClip(date) とする。
  10. dateObj.[[DateValue]]v に設定する。
  11. v を返す。

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

Note

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

21.4.4.35 Date.prototype.toDateString ( )

このmethodは呼び出されたとき、次のstepsを実行します:

  1. dateObjthis valueとする。
  2. RequireInternalSlot(dateObj, [[DateValue]])を実行する。
  3. tvdateObj.[[DateValue]]とする。
  4. tvNaNなら、"Invalid Date"を返す。
  5. tLocalTime(tv)とする。
  6. DateString(t)を返す。

21.4.4.36 Date.prototype.toISOString ( )

このmethodは呼び出されたとき、次のstepsを実行します:

  1. dateObjthis valueとする。
  2. RequireInternalSlot(dateObj, [[DateValue]])を実行する。
  3. tvdateObj.[[DateValue]]とする。
  4. tvNaNなら、RangeError例外をthrowする。
  5. Assert: tvintegral Numberである。
  6. tvDate Time String Formatでrepresentできないyearに対応するなら、RangeError例外をthrowする。
  7. UTC time scale上で、すべてのformat elementsおよびUTC offset representation "Z"を含む、Date Time String FormatにおけるtvのString representationを返す。

21.4.4.37 Date.prototype.toJSON ( key )

このmethodは、JSON.stringify25.5.4)による使用のためにDateのString representationを提供します。

これは呼び出されたとき、次のstepsを実行します:

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

argumentはignoredされます。

Note 2

このmethodは意図的にgenericです;そのthis valueがDateであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。ただし、そのようなobjectはtoISOString methodを持つ必要があります。

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

ECMA-402 Internationalization APIを含むECMAScript implementationは、このmethodをECMA-402 specificationで指定される通りにimplementしなければなりません。ECMAScript implementationがECMA-402 APIを含まない場合、このmethodの次のspecificationが使用されます:

このmethodはString valueを返します。Stringのcontentsはimplementation-definedですが、host environmentのcurrent localeのconventionsに対応するconvenientでhuman-readableなformで、current time zoneにおけるDateの“date” portionを表すことを意図しています。

このmethodのoptional parametersのmeaningはECMA-402 specificationで定義されます;ECMA-402 supportを含まないimplementationsは、それらのparameter positionsを他の目的に使用してはなりません。

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

ECMA-402 Internationalization APIを含むECMAScript implementationは、このmethodをECMA-402 specificationで指定される通りにimplementしなければなりません。ECMAScript implementationがECMA-402 APIを含まない場合、このmethodの次のspecificationが使用されます:

このmethodはString valueを返します。Stringのcontentsはimplementation-definedですが、host environmentのcurrent localeのconventionsに対応するconvenientでhuman-readableなformで、current time zoneにおけるDateを表すことを意図しています。

このmethodのoptional parametersのmeaningはECMA-402 specificationで定義されます;ECMA-402 supportを含まないimplementationsは、それらのparameter positionsを他の目的に使用してはなりません。

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

ECMA-402 Internationalization APIを含むECMAScript implementationは、このmethodをECMA-402 specificationで指定される通りにimplementしなければなりません。ECMAScript implementationがECMA-402 APIを含まない場合、このmethodの次のspecificationが使用されます:

このmethodはString valueを返します。Stringのcontentsはimplementation-definedですが、host environmentのcurrent localeのconventionsに対応するconvenientでhuman-readableなformで、current time zoneにおけるDateの“time” portionを表すことを意図しています。

このmethodのoptional parametersのmeaningはECMA-402 specificationで定義されます;ECMA-402 supportを含まないimplementationsは、それらのparameter positionsを他の目的に使用してはなりません。

21.4.4.41 Date.prototype.toString ( )

このmethodは呼び出されたとき、次のstepsを実行します:

  1. dateObjthis valueとする。
  2. RequireInternalSlot(dateObj, [[DateValue]])を実行する。
  3. tvdateObj.[[DateValue]]とする。
  4. ToDateString(tv)を返す。
Note 1

d.[[DateValue]]が1000でevenly divisibleである任意のDate dについて、Date.parse(d.toString()) = d.valueOf()のresultになります。21.4.3.2を参照してください。

Note 2

このmethodはgenericではありません;そのthis valueがDateでない場合、TypeError例外をthrowします。したがって、methodとして使用するために他の種類のobjectsへtransferすることはできません。

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 を、WeekDay Index = WeekDay(tv) である Table 61 のエントリの Name とする。
  2. month を、Month Index = MonthFromTime(tv) である Table 62 のエントリの Name とする。
  3. dayToZeroPaddedDecimalString(DateFromTime(tv), 2) とする。
  4. yvYearFromTime(tv) とする。
  5. yv ≥ 0 の場合、yearSign を空の String とする。それ以外の場合、yearSign"-" とする。
  6. paddedYearToZeroPaddedDecimalString(abs(yv), 4) とする。
  7. weekday、コード単位 0x0020 (SPACE)、month、コード単位 0x0020 (SPACE)、day、コード単位 0x0020 (SPACE)、yearSign、および paddedYear を文字列連結した結果を返す。
Table 61: 曜日の名前
WeekDay Index Name
0 "Sun"
1 "Mon"
2 "Tue"
3 "Wed"
4 "Thu"
5 "Fri"
6 "Sat"
Table 62: 年の各月の名前
Month Index 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) × nsPerMillisecond)) とする。
  4. offsettruncate(offsetNs / nsPerMillisecond) とする。
  5. 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. localTimeLocalTime(tv) とする。
  3. DateString(localTime)、コード単位 0x0020 (SPACE)、TimeString(localTime)、および TimeZoneString(tv) を文字列連結した結果を返す。

21.4.4.42 Date.prototype.toTimeString ( )

このmethodは呼び出されたとき、次のstepsを実行します:

  1. dateObjthis valueとする。
  2. RequireInternalSlot(dateObj, [[DateValue]])を実行する。
  3. tvdateObj.[[DateValue]]とする。
  4. tvNaNなら、"Invalid Date"を返す。
  5. localTimeLocalTime(tv)とする。
  6. TimeString(localTime)とTimeZoneString(tv)のstring-concatenationを返す。

21.4.4.43 Date.prototype.toUTCString ( )

このmethodは、this valueに対応するinstant in timeを表すString valueを返します。StringのformatはRFC 7231のHTTP-dateに基づき、ECMAScript Datesによってsupportされるfull range of timesをsupportするようgeneralizedされています。

これは呼び出されたとき、次のstepsを実行します:

  1. dateObjthis 値とする。
  2. RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tvdateObj.[[DateValue]] とする。
  4. tvNaN の場合、"Invalid Date" を返す。
  5. weekday を、WeekDay Index = WeekDay(tv) である Table 61 のエントリの Name とする。
  6. month を、Month Index = MonthFromTime(tv) である Table 62 のエントリの Name とする。
  7. dayToZeroPaddedDecimalString(DateFromTime(tv), 2) とする。
  8. yvYearFromTime(tv) とする。
  9. 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 ( )

このmethodは呼び出されたとき、次のstepsを実行します:

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

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

このmethodは、Dateをprimitive valueへconvertするためにECMAScript language operatorsによって呼び出されます。hintにallowedなvaluesは"default""number"、および"string"です。Datesは、"default""string"とequivalentとして扱うという点でbuilt-in ECMAScript objectの中でuniqueです。他のすべてのbuilt-in ECMAScript objectsは"default""number"とequivalentとして扱います。

これは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. objがObjectでないなら、TypeError例外をthrowする。
  3. hint"string"または"default"のいずれかなら、
    1. tryFirststringとする。
  4. そうでなく、hint"number"なら、
    1. tryFirstnumberとする。
  5. そうでなければ、
    1. TypeError例外をThrowする。
  6. OrdinaryToPrimitive(obj, tryFirst)を返す。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }を持ちます。

このmethodの"name" propertyのvalueは"[Symbol.toPrimitive]"です。

21.4.5 Properties of Date Instances

Date instancesは、Date prototype objectからpropertiesをinheritするordinary objectsです。Date instancesはまた[[DateValue]] internal slotを持ちます。[[DateValue]] internal slotは、このDateによって表されるtime valueです。