클래스 정의의 extends 절 값으로 사용할 수 있습니다. 명시된 Number 동작을 상속하려는 하위 클래스 생성자는 [[NumberData]] 내부 슬롯을 갖는 하위 클래스 인스턴스를 생성하고 초기화하기 위해 Number 생성자에 대한 super 호출을 포함해야 합니다.
IEEE 754-2019의 정밀도 제한으로 인해 필요한 반올림 동작 때문에 Number.MAX_SAFE_INTEGER보다 큰 모든 정수에 대한 Number 값은 적어도 하나의 다른 정수와 공유됩니다. 따라서 이러한 큰 크기의 정수는 안전하지 않으며, Number 값으로 정확히 표현될 수 있거나 서로 구별될 수 있다고 보장되지 않습니다. 예를 들어 9007199254740992와 9007199254740993은 모두 Number 값9007199254740992𝔽로 평가됩니다.
Number.MAX_SAFE_INTEGER의 값은 9007199254740991𝔽 (𝔽(253 - 1))입니다.
이 속성에는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 특성이 있습니다.
21.1.2.7 Number.MAX_VALUE
Number.MAX_VALUE의 값은 가장 큰 양의 유한 Number이며, 대략 1.7976931348623157 × 10308입니다.
이 속성에는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 특성이 있습니다.
21.1.2.8 Number.MIN_SAFE_INTEGER
참고
IEEE 754-2019의 정밀도 제한으로 인해 필요한 반올림 동작 때문에 Number.MIN_SAFE_INTEGER보다 작은 모든 정수에 대한 Number 값은 적어도 하나의 다른 정수와 공유됩니다. 따라서 이러한 큰 크기의 정수는 안전하지 않으며, Number 값으로 정확히 표현될 수 있거나 서로 구별될 수 있다고 보장되지 않습니다. 예를 들어 -9007199254740992와 -9007199254740993은 모두 Number 값-9007199254740992𝔽로 평가됩니다.
Number.MIN_SAFE_INTEGER의 값은 -9007199254740991𝔽 (𝔽(-(253 - 1)))입니다.
이 속성에는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 특성이 있습니다.
21.1.2.9 Number.MIN_VALUE
Number.MIN_VALUE의 값은 Number 타입의 가장 작은 양의 값이며, 대략 5 × 10-324입니다.
IEEE 754-2019 배정밀도 이진 표현에서 가능한 가장 작은 값은 비정규화된 수입니다. 구현이 비정규화된 값을 지원하지 않는 경우 Number.MIN_VALUE의 값은 구현에서 실제로 표현할 수 있는 가장 작은 0이 아닌 양의 값이어야 합니다.
이 속성에는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 특성이 있습니다.
21.1.2.10 Number.NaN
Number.NaN의 값은 NaN입니다.
이 속성에는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 특성이 있습니다.
21.1.2.11 Number.NEGATIVE_INFINITY
Number.NEGATIVE_INFINITY의 값은 -∞𝔽입니다.
이 속성에는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 특성이 있습니다.
이 메서드는 이 Number 값을 유효숫자의 소수점 앞에 한 자리, 유효숫자의 소수점 뒤에 fractionDigits자리 숫자가 있는 십진 지수 표기법으로 나타낸 String을 반환합니다. fractionDigits가 undefined이면 Number를 고유하게 지정하는 데 필요한 만큼의 유효숫자를 포함합니다(ToString과 같지만 이 경우 Number는 항상 지수 표기법으로 출력됩니다).
significand를 코드 단위 0x0030 (DIGIT ZERO)이 fractionCount + 1회 나타나는 String 값으로 둡니다.
exponent를 0으로 둡니다.
그렇지 않으면,
fractionDigits가 undefined가 아니면 다음을 수행합니다.
exponent와 intSignificand를 10fractionCount ≤ intSignificand < 10fractionCount + 1이고 intSignificand × 10exponent - fractionCount - number가 가능한 한 0에 가까워지는 정수로 둡니다. 이러한 exponent와 intSignificand의 쌍이 두 개 있으면 intSignificand × 10exponent - fractionCount가 더 큰 exponent와 intSignificand를 선택합니다.
그렇지 않으면,
exponent, intSignificand, ff를 ff ≥ 0, 10ff ≤ intSignificand < 10ff + 1, 𝔽(intSignificand × 10exponent - ff)가 𝔽(number)이고 ff가 가능한 한 작은 정수로 둡니다. intSignificand의 십진 표현은 ff + 1자리 숫자를 가지며, intSignificand는 10으로 나누어떨어지지 않고, intSignificand의 최하위 숫자가 이러한 기준에 의해 반드시 고유하게 결정되는 것은 아니라는 점에 유의하십시오.
fractionCount를 ff로 설정합니다.
significand를 intSignificand의 십진 표현 숫자들로 구성된 String 값으로 둡니다(순서대로, 선행 0 없이).
fractionCount ≠ 0이면 다음을 수행합니다.
intPart를 significand의 첫 번째 코드 단위로 둡니다.
fractionalPart를 significand의 나머지 fractionCount개 코드 단위로 둡니다.
위 규칙에서 요구하는 것보다 더 정확한 변환을 제공하는 구현의 경우, 11.b.i 단계의 다음 대체 버전을 지침으로 사용하는 것이 권장됩니다:
exponent, intSignificand, ff를 ff ≥ 0, 10ff ≤ intSignificand < 10ff + 1, 𝔽(intSignificand × 10exponent - ff)가 𝔽(number)이고 ff가 가능한 한 작은 정수로 둡니다. intSignificand에 여러 가능성이 있으면 𝔽(intSignificand × 10exponent - ff)가 𝔽(number)에 가장 가까워지는 intSignificand를 선택합니다. 이러한 가능한 intSignificand 값이 두 개 있으면 짝수인 값을 선택합니다.
이 메서드는 이 Number 값을 유효숫자의 소수점 앞에 한 자리, 유효숫자의 소수점 뒤에 precision - 1자리 숫자가 있는 십진 지수 표기법 또는 precision개의 유효숫자가 있는 십진 고정 표기법으로 나타낸 String을 반환합니다. precision이 undefined이면 대신 ToString을 호출합니다.
significand를 코드 단위 0x0030 (DIGIT ZERO)이 precisionCount회 나타나는 String 값으로 둡니다.
exponent를 0으로 둡니다.
그렇지 않으면,
exponent와 intSignificand를 10precisionCount - 1 ≤ intSignificand < 10precisionCount이고 intSignificand × 10exponent - precisionCount + 1 - number가 가능한 한 0에 가까워지는 정수로 둡니다. 이러한 exponent와 intSignificand의 쌍이 두 개 있으면 intSignificand × 10exponent - precisionCount + 1이 더 큰 exponent와 intSignificand를 선택합니다.
significand를 intSignificand의 십진 표현 숫자들로 구성된 String 값으로 둡니다(순서대로, 선행 0 없이).
exponent < -6 또는 exponent ≥ precisionCount이면 다음을 수행합니다.
이 속성에는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } 특성이 있습니다.
21.3.2 Math 객체의 함수 속성
참고
acos, acosh, asin, asinh, atan, atanh, atan2, cbrt, cos, cosh, exp, expm1, hypot, log, log1p, log2, log10, pow, random, sin, sinh, tan, tanh 함수의 동작은 관심 있는 경계 사례를 나타내는 특정 인수 값에 대해 특정 결과를 요구하는 것을 제외하고는 여기에서 정확히 명시되지 않습니다. 다른 인수 값에 대해 이러한 함수는 익숙한 수학 함수의 결과에 대한 근삿값을 계산하도록 의도되지만, 근사 알고리즘의 선택에는 어느 정도의 재량이 허용됩니다. 일반적인 의도는 구현자가 특정 하드웨어 플랫폼에서 ECMAScript에 대해 해당 플랫폼의 C 프로그래머가 사용할 수 있는 것과 동일한 수학 라이브러리를 사용할 수 있도록 하는 것입니다.
알고리즘의 선택은 구현에 맡겨져 있지만, 구현에서는 Sun Microsystems의 자유롭게 배포 가능한 수학 라이브러리인 fdlibm에 포함된 IEEE 754-2019 산술용 근사 알고리즘을 사용하는 것이 권장됩니다(다만 이 표준에서 명시하는 것은 아닙니다)(http://www.netlib.org/fdlibm).
이 함수는 인수 y와 x의 몫 y / x의 아크탄젠트를 반환하며, 여기서 y와 x의 부호를 사용하여 결과의 사분면을 결정합니다. 두 인수를 받는 아크탄젠트 함수에서 y라는 이름의 인수가 첫 번째이고 x라는 이름의 인수가 두 번째인 것은 의도적이며 전통적인 방식이라는 점에 유의하십시오. 결과는 라디안으로 표현되며 -π부터 +π까지의 양 끝을 포함하는 구간에 있습니다.
이 연산은 이중 반올림 가능성 때문에 binary32로 캐스팅한 다음 binary16으로 캐스팅하는 것과 같지 않습니다. 예를 들어 k = 1.00048828125000022204𝔽인 수를 고려하면 Math.f16round(k)는 1.0009765625𝔽이지만 Math.f16round(Math.fround(k))는 1𝔽입니다.
모든 플랫폼이 binary64에서 binary16으로의 캐스팅을 기본적으로 지원하는 것은 아닙니다. MIT 라이선스의 half 라이브러리를 포함하여 이를 제공할 수 있는 다양한 라이브러리가 있습니다. 또는 먼저 roundTiesToEven에서 binary64를 binary32로 캐스팅한 다음 결과가 잘못된 이중 반올림을 초래할 수 있는지 확인할 수 있습니다. 이러한 경우에는 binary32 값의 가수를 조정하여 초기 캐스팅을 roundTiesToOdd에서 수행했을 때 생성되는 값이 되도록 명시적으로 처리할 수 있습니다. 그런 다음 조정된 값을 roundTiesToEven에서 binary16으로 캐스팅하면 올바른 값이 생성됩니다.
Math.round(x)의 값이 항상 Math.floor(x + 0.5)의 값과 같은 것은 아닙니다. x가 -0𝔽이거나 x가 -0𝔽보다 작지만 -0.5𝔽 이상인 경우 Math.round(x)는 -0𝔽을 반환하지만 Math.floor(x + 0.5)는 +0𝔽을 반환합니다. Math.round(x)는 x + 0.5를 계산할 때 발생하는 내부 반올림 때문에 Math.floor(x + 0.5)의 값과 다를 수도 있습니다.
다음 추상 연산은 시간 값(21.4.1.1에 정의됨)을 대상으로 동작합니다. 모든 경우에 이러한 함수 중 하나의 인수가 NaN이면 결과도 NaN이 된다는 점에 유의하시기 바랍니다.
21.4.1.1 시간 값과 시간 범위
ECMAScript의 시간 측정은 POSIX의 시간 측정과 유사하며, 특히 역산 그레고리력, 1970년 1월 1일 UTC 시작 시점의 자정인 epoch, 그리고 모든 날이 정확히 86,400초(각각 1000밀리초)로 구성된다는 정의를 공유합니다.
ECMAScript 시간 값은 Number이며, 밀리초 정밀도로 시간상의 한 시점을 나타내는 정수 Number(유한 시간 값이라고 함)이거나 특정 시점을 나타내지 않는 NaN입니다. MillisecondsPerDay의 정수배인 유한 시간 값(즉, 어떤 정수d에 대해 MillisecondsPerDay × d인 값)은 에포크로부터 d개의 온전한 UTC 일이 지난 뒤 시작되는 UTC 일의 시작 시점을 나타냅니다(음수 d의 경우 에포크보다 앞선 시점). 그 밖의 모든 유한 시간 값 tv는 그러한 배수이면서 그보다 앞선 가장 큰 유한 시간 값 s를 기준으로 정의되며, s와 동일한 UTC 일 내에서 s보다 (tv - s)밀리초 뒤에 발생하는 시점을 나타냅니다.
시간 값은 UTC 윤초를 고려하지 않습니다. 양의 윤초 안의 순간을 나타내는 시간 값은 없으며, 음의 윤초로 UTC 시간선에서 제거된 순간을 나타내는 시간 값은 존재합니다. 그러나 시간 값의 정의는 여전히 UTC와 구간별 정렬을 이루며, 불연속은 윤초 경계에서만 발생하고 윤초 이외에서는 차이가 0입니다.
Number는 -9,007,199,254,740,992부터 9,007,199,254,740,992까지의 모든 정수를 정확하게 나타낼 수 있습니다(21.1.2.8 및 21.1.2.6). 시간 값은 이보다 약간 작은 -8,640,000,000,000,000부터 8,640,000,000,000,000밀리초까지의 범위를 지원합니다. 이는 1970년 1월 1일 UTC 시작 시점의 자정을 기준으로 정확히 -100,000,000일부터 100,000,000일까지의 시간 값 범위를 제공합니다.
1970년 1월 1일 UTC 시작 시점의 자정 정확한 순간은 시간 값 +0𝔽으로 나타냅니다.
참고
역산 그레고리력에서 윤년은 정확히 4로 나누어떨어지고 동시에 400으로 나누어떨어지거나 100으로 나누어떨어지지 않는 해입니다.
역산 그레고리력의 400년 주기에는 97개의 윤년이 포함됩니다. 따라서 연평균은 365.2425일이며 이는 31,556,952,000밀리초입니다. 따라서 Number가 밀리초 정밀도로 정확하게 나타낼 수 있는 최대 범위는 1970년을 기준으로 약 -285,426년부터 285,426년까지입니다. 이 절에 명시된 시간 값이 지원하는 더 작은 범위는 1970년을 기준으로 약 -273,790년부터 273,790년까지입니다.
추상 연산 TimeWithinDay. 인수 tv (a finite time value). 반환값: an integer in the interval from 0 (inclusive) to MillisecondsPerDay (exclusive). tv가 속하는 날의 시작 이후 경과한 밀리초 수를 반환합니다. 호출되면 다음 단계를 수행한다.
추상 연산 DayFromYear. 인수 y (정수). 반환값: 정수. 연도 y의 첫날에 해당하는 날짜 번호를 반환합니다. 호출되면 다음 단계를 수행한다.
참고: 다음 단계에서 numberYears1, numberYears4, numberYears100 및 numberYears400은 각각 epoch와 연도 y의 시작 사이에 나타나는 1, 4, 100 및 400으로 나누어떨어지는 연도의 수를 나타냅니다. y가 epoch보다 이전이면 이 수는 음수입니다.
추상 연산 MonthFromTime. 인수 tv (a finite time value). 반환값: an integer in the inclusive interval from 0 to 11. tv가 속하는 월을 식별하는 정수를 반환합니다. 월 값 0은 1월, 1은 2월, 2는 3월, 3은 4월, 4는 5월, 5는 6월, 6은 7월, 7은 8월, 8은 9월, 9는 10월, 10은 11월, 11은 12월을 지정합니다. MonthFromTime(+0𝔽) = 0이며 이는 1970년 1월 1일 목요일에 대응한다는 점에 유의하시기 바랍니다. 호출되면 다음 단계를 수행한다.
추상 연산 WeekDay. 인수 tv (a finite time value). 반환값: an integer in the inclusive interval from 0 to 6. tv가 속하는 요일을 식별하는 정수를 반환합니다. 요일 값 0은 일요일, 1은 월요일, 2는 화요일, 3은 수요일, 4는 목요일, 5는 금요일, 6은 토요일을 지정합니다. WeekDay(+0𝔽) = 4이며 이는 1970년 1월 1일 목요일에 대응한다는 점에 유의하시기 바랍니다. 호출되면 다음 단계를 수행한다.
추상 연산 MillisecondFromTime. 인수 tv (a finite time value). 반환값: an integer in the inclusive interval from 0 to 999. tv가 속하는 초의 밀리초를 반환합니다. 호출되면 다음 단계를 수행한다.
추상 연산 GetUTCEpochNanoseconds. 인수 year (정수), month (an integer in the inclusive interval from 1 to 12), day (an integer in the inclusive interval from 1 to 31), hour (an integer in the inclusive interval from 0 to 23), minute (an integer in the inclusive interval from 0 to 59), second (an integer in the inclusive interval from 0 to 59), millisecond (an integer in the inclusive interval from 0 to 999), microsecond (an integer in the inclusive interval from 0 to 999) 및 nanosecond (an integer in the inclusive interval from 0 to 999). 반환값: an epoch nanoseconds count. 반환 값은 주어진 ISO 8601 달력 날짜와 UTC의 시계 시간에 대응하는 epoch 나노초 수입니다. 호출되면 다음 단계를 수행한다.
주 시간대 식별자는 사용 가능한 이름 있는 시간대의 기본 식별자입니다.
비주 시간대 식별자는 주 시간대 식별자가 아닌 사용 가능한 이름 있는 시간대의 식별자입니다.
사용 가능한 이름 있는 시간대 식별자는 주 시간대 식별자 또는 비주 시간대 식별자 중 하나입니다.
각 사용 가능한 이름 있는 시간대 식별자는 정확히 하나의 사용 가능한 이름 있는 시간대와 연결됩니다.
각 사용 가능한 이름 있는 시간대는 정확히 하나의 주 시간대 식별자 및 0개 이상의 비주 시간대 식별자와 연결됩니다.
ECMAScript 구현체는 식별자가 "UTC"인 사용 가능한 이름 있는 시간대를 지원해야 하며, 이는 UTC 시간대의 주 시간대 식별자여야 합니다.
또한 구현체는 임의의 수의 다른 사용 가능한 이름 있는 시간대를 지원할 수 있습니다.
ECMA-402 국제화 API 명세에 설명된 시간대 요구 사항을 따르는 구현체를 시간대 인식 구현체라고 합니다.
시간대 인식 구현체는 IANA Time Zone Database의 “Zone” 및 “Link” 이름에 대응하는 사용 가능한 이름 있는 시간대를 지원해야 하며, 그러한 이름만 지원해야 합니다.
시간대 인식 구현체에서 주 시간대 식별자는 IANA Time Zone Database의 “Zone” 이름이고, 비주 시간대 식별자는 각각 “Link” 이름입니다. 다만 ECMA-402에 명시된 AvailableNamedTimeZoneIdentifiers에 의해 특별히 재정의된 경우는 제외합니다.
전체 IANA Time Zone Database를 지원하지 않는 구현체에도 시간대를 나타내는 식별자로 IANA Time Zone Database 이름을 사용하는 것이 권장됩니다.
구현 정의 추상 연산 GetNamedTimeZoneEpochNanoseconds. 인수 timeZoneIdentifier (String), year (정수), month (an integer in the inclusive interval from 1 to 12), day (an integer in the inclusive interval from 1 to 31), hour (an integer in the inclusive interval from 0 to 23), minute (an integer in the inclusive interval from 0 to 59), second (an integer in the inclusive interval from 0 to 59), millisecond (an integer in the inclusive interval from 0 to 999), microsecond (an integer in the inclusive interval from 0 to 999) 및 nanosecond (an integer in the inclusive interval from 0 to 999). 반환값: 리스트 (요소: epoch nanoseconds counts).
반환된 List의 각 값은 timeZoneIdentifier가 식별하는 이름 있는 시간대에서 주어진 ISO 8601 달력 날짜 및 시계 시간에 대응하는 epoch 나노초 수를 나타냅니다.
입력이 음의 시간대 전이 때문에 두 번 이상 발생하는 로컬 시간을 나타내면(예: 일광 절약 시간이 끝나거나 시간대 규칙 변경으로 시간대 오프셋이 감소하는 경우) 반환된 List에는 둘 이상의 요소가 있으며 숫자 값의 오름차순으로 정렬됩니다.
입력이 양의 시간대 전이 때문에 건너뛴 로컬 시간을 나타내면(예: 일광 절약 시간이 시작되거나 시간대 규칙 변경으로 시간대 오프셋이 증가하는 경우) 반환된 List는 비어 있습니다.
그 밖의 경우 반환된 List에는 하나의 요소가 있습니다.
어떤 시간대에도 로컬 정치적 규칙을 포함하지 않는 ECMAScript 구현체에서 사용하는 GetNamedTimeZoneEpochNanoseconds의 기본 구현은 호출되면 다음 단계를 수행합니다:
America/New_York에서 2017년 11월 5일 오전 1:30은 두 번 반복되므로 GetNamedTimeZoneEpochNanoseconds("America/New_York", 2017, 11, 5, 1, 30, 0, 0, 0, 0)은 길이가 2인 List를 반환하며, 첫 번째 요소는 05:30 UTC(UTC 오프셋 -04:00인 미국 동부 일광 절약 시간의 01:30에 대응)를 나타내고 두 번째 요소는 06:30 UTC(UTC 오프셋 -05:00인 미국 동부 표준시의 01:30에 대응)를 나타냅니다.
America/New_York에서 2017년 3월 12일 오전 2:30은 존재하지 않으므로 GetNamedTimeZoneEpochNanoseconds("America/New_York", 2017, 3, 12, 2, 30, 0, 0, 0, 0)은 빈 List를 반환합니다.
ECMA-402 국제화 API를 구현하는 모든 구현체를 포함한 시간대 인식 구현체는 ECMA-402에 명시된 대로 AvailableNamedTimeZoneIdentifiers 추상 연산을 구현해야 합니다.
그렇지 않으면 AvailableNamedTimeZoneIdentifiers는 호출되면 다음 단계를 수행합니다:
단언: result에는 record.[[Identifier]]가 "UTC"이고 record.[[PrimaryIdentifier]]가 "UTC"인 Time Zone Identifier Recordrecord가 포함되어 있습니다.
result를 반환합니다.
21.4.1.24 SystemTimeZoneIdentifier ( )
구현 정의 추상 연산 SystemTimeZoneIdentifier. 인수 없음. 반환값: String.
호스트 환경의 현재 시간대를 나타내는 String을 반환하며, 이는 IsTimeZoneOffsetString이 true를 반환하는 UTC 오프셋을 나타내는 String 또는 주 시간대 식별자 중 하나입니다.
호출되면 다음 단계를 수행한다.
구현체가 UTC 시간대만 지원하면 "UTC"를 반환합니다.
systemTimeZoneString을 호스트 환경의 현재 시간대를 나타내는 String으로 두며, 주 시간대 식별자 또는 오프셋 시간대 식별자 중 하나입니다.
예를 들어 호스트 환경이 사용자가 미국 동부 시간을 자신의 시간대로 선택한 시스템의 브라우저이면 SystemTimeZoneIdentifier는 "America/New_York"를 반환합니다.
21.4.1.25 LocalTime ( tv )
추상 연산 LocalTime. 인수 tv (a finite time value). 반환값: 정수인 Number.
tv를 UTC에서 로컬 시간으로 변환합니다.
tv에 적용되는 표준시 및 일광 절약 시간에 대한 로컬 정치적 규칙을 사용하여 이 절에 명시된 방식으로 결과를 결정해야 합니다.
호출되면 다음 단계를 수행한다.
반복되는 시간이 있는 음의 시간대 전이 시점(예: 일광 절약 시간이 끝나거나 시간대 조정이 감소하는 경우)에 서로 다른 두 입력 시간 값tvUTC가 동일한 로컬 시간 tlocal로 변환됩니다.
LocalTime(UTC(tvlocal))은 반드시 항상 tvlocal과 같지는 않습니다. 마찬가지로 UTC(LocalTime(tvUTC))도 반드시 항상 tvUTC과 같지는 않습니다.
21.4.1.26 UTC ( t )
추상 연산 UTC. 인수 t (Number). 반환값: a time value.
t를 로컬 시간에서 UTC 시간 값으로 변환합니다.
t에 적용되는 표준시 및 일광 절약 시간에 대한 로컬 정치적 규칙을 사용하여 이 절에 명시된 방식으로 결과를 결정해야 합니다.
호출되면 다음 단계를 수행한다.
참고: 다음 단계는 t가 음의 시간대 전이에서 여러 번 반복되는 로컬 시간(예: 일광 절약 시간이 끝나거나 시간대 규칙 변경으로 시간대 오프셋이 감소하는 경우) 또는 양의 시간대 전이에서 건너뛴 로컬 시간(예: 일광 절약 시간이 시작되거나 시간대 규칙 변경으로 시간대 오프셋이 증가하는 경우)을 나타낼 때 t가 전이 이전의 시간대 오프셋을 사용하여 해석되도록 보장합니다.
possibleInstants가 비어 있지 않으면, 다음을 수행합니다.
disambiguatedInstant를 possibleInstants[0]으로 둡니다.
그렇지 않으면,
참고: t는 양의 시간대 전이에서 건너뛴 로컬 시간을 나타냅니다(예: 일광 절약 시간이 시작되거나 시간대 규칙 변경으로 UTC 오프셋이 증가하는 경우).
입력 t는 명목상 시간 값이지만 어떤 Number 값이든 될 수 있습니다.
로컬 UTC 오프셋과 관계없이 시간 값 범위의 경계에 대응하는 입력을 지원할 수 있도록 알고리즘은 t를 시간 값 범위로 제한해서는 안 됩니다.
예를 들어 최대 시간 값은 8.64 × 1015이며 "+275760-09-13T00:00:00Z"에 대응합니다.
해당 순간에 로컬 시간대 오프셋이 UTC보다 1시간 앞선 환경에서는 8.64 × 1015 + 3.6 × 106이라는 더 큰 입력으로 나타내며, 이는 "+275760-09-13T01:00:00+01:00"에 대응합니다.
America/New_York에서 2017년 11월 5일 오전 1:30은 두 번 반복되지만(시계를 뒤로 돌림), 오전 1:30 UTC-05가 아니라 오전 1:30 UTC-04로 해석해야 합니다.
UTC(TimeClip(MakeDate(MakeDay(2017, 10, 5), MakeTime(1, 30, 0, 0))))에서 offsetMilliseconds의 값은 -4 × MillisecondsPerHour입니다.
America/New_York에서 2017년 3월 12일 오전 2:30은 존재하지 않지만 오전 2:30 UTC-05(오전 3:30 UTC-04와 동등)로 해석해야 합니다.
UTC(TimeClip(MakeDate(MakeDay(2017, 2, 12), MakeTime(2, 30, 0, 0))))에서 offsetMilliseconds의 값은 -5 × MillisecondsPerHour입니다.
참고 2
UTC(LocalTime(tUTC))은 반드시 항상 tUTC과 같지는 않습니다. 마찬가지로 LocalTime(UTC(tlocal))도 반드시 항상 tlocal과 같지는 않습니다.
추상 연산 MakeFullYear. 인수 year (Number). 반환값: (정수인 Number 또는 NaN). year의 정수 부분과 연결된 전체 연도를 반환하며, 0부터 99까지의 폐구간에 속하는 값은 1900년 시작 이후 경과한 연도 수로 해석합니다. 역산 그레고리력과 맞추기 위해 “전체 연도”는 연도 0(기원전 1년)의 시작 이후 완료된 연도의 부호 있는 수로 정의됩니다. 호출되면 다음 단계를 수행한다.
ECMAScript는 ISO 8601 달력 날짜 확장 형식에서 변형된 날짜-시간 문자열 교환 형식을 정의합니다. 형식은 다음과 같습니다: YYYY-MM-DDTHH:mm:ss.sssZ
각 요소는 다음과 같습니다:
YYYY
역산 그레고리력의 연도를 0000부터 9999까지의 네 자리 십진수로 나타내거나, "+" 또는 "-" 뒤에 여섯 자리 십진수가 이어지는 확장 연도로 나타냅니다.
-
"-" (하이픈)은 문자열에 문자 그대로 두 번 나타납니다.
MM
01(1월)부터 12(12월)까지 두 자리 십진수로 나타내는 연중 월입니다.
DD
01부터 31까지 두 자리 십진수로 나타내는 월중 날짜입니다.
T
시간 요소의 시작을 나타내기 위해 "T"가 문자열에 문자 그대로 나타납니다.
HH
자정 이후 지나간 완전한 시간 수를 00부터 24까지 두 자리 십진수로 나타냅니다.
:
":" (콜론)이 문자열에 문자 그대로 두 번 나타납니다.
mm
시가 시작된 이후 지나간 완전한 분의 수를 00부터 59까지 두 자리 십진수로 나타냅니다.
ss
분이 시작된 이후 지나간 완전한 초의 수를 00부터 59까지 두 자리 십진수로 나타냅니다.
.
"." (점)이 문자열에 문자 그대로 나타납니다.
sss
초가 시작된 이후 지나간 완전한 밀리초 수를 세 자리 십진수로 나타냅니다.
Z
"Z" (오프셋이 없는 UTC) 또는 "+"나 "-" 뒤에 시간 표현 HH:mm이 이어지는 형식으로 지정되는 UTC 오프셋 표현입니다(각각 UTC보다 앞서거나 뒤처진 로컬 시간을 나타내기 위한 시간대 오프셋 문자열 형식의 부분 집합).
이 형식에는 날짜 전용 형식도 포함됩니다:
YYYY
YYYY-MM
YYYY-MM-DD
또한 위 날짜 전용 형식 중 하나 바로 뒤에 다음 시간 형식 중 하나가 이어지고 선택적으로 UTC 오프셋 표현이 추가되는 “날짜-시간” 형식도 포함됩니다:
THH:mm
THH:mm:ss
THH:mm:ss.sss
범위를 벗어나거나 형식에 맞지 않는 요소를 포함하는 문자열은 이 형식의 유효한 인스턴스가 아닙니다.
참고 1
모든 날은 자정에 시작하고 자정에 끝나므로 하나의 날짜와 연결될 수 있는 두 자정을 구별하기 위해 00:00과 24:00이라는 두 표기법을 사용할 수 있습니다. 따라서 1995-02-04T24:00과 1995-02-05T00:00이라는 다음 두 표기법은 정확히 동일한 시점을 가리킵니다.
참고 2
이 형식은 RFC 9557에 정의된 시간대 이름 주석을 지원하지 않으며, 시간대 오프셋의 숫자 표현만 지원합니다.
21.4.1.32.1 확장 연도
1970년 1월 1일을 기준으로 앞뒤 약 273,790년의 전체 시간 값 범위(21.4.1.1)를 다루려면 0 이전 또는 9999 이후의 연도를 나타내야 합니다. ISO 8601은 연도 표현의 확장을 허용하지만 정보 교환 당사자 간의 상호 합의가 있는 경우에만 허용합니다. 단순화된 ECMAScript 형식에서 이러한 확장 연도 표현은 6자리 숫자를 가져야 하며 항상 + 또는 - 부호가 앞에 붙습니다. 연도 0은 양수로 간주되며 + 부호가 앞에 붙어야 합니다. 연도 0을 -000000으로 나타내는 것은 유효하지 않습니다. 확장 연도를 사용하여 시간 값 범위 밖의 순간을 나타내며 날짜 시간 문자열 형식과 일치하는 문자열은 Date.parse에서 인식할 수 없는 것으로 취급되며, 이 함수는 구현체 고유 동작이나 휴리스틱으로 대체하지 않고 NaN을 반환합니다.
참고
확장 연도를 사용하는 날짜-시간 값의 예:
-271821-04-20T00:00:00Z
기원전 271822년
-000001-01-01T00:00:00Z
기원전 2년
+000000-01-01T00:00:00Z
기원전 1년
+000001-01-01T00:00:00Z
서기 1년
+001970-01-01T00:00:00Z
서기 1970년
+002009-12-15T00:00:00Z
서기 2009년
+275760-09-13T00:00:00Z
서기 275760년
21.4.1.33 시간대 오프셋 문자열 형식
ECMAScript는 ISO 8601에서 파생된 UTC 오프셋용 문자열 교환 형식을 정의합니다.
형식은 다음 문법으로 설명됩니다.
이 함수는 인수에 ToString 연산자를 적용합니다. ToString이 비정상 완료를 생성하면 해당 Completion Record를 즉시 반환합니다. 그렇지 않으면 이 함수는 결과 String을 날짜와 시간으로 해석하고, 해당 날짜와 시간에 대응하는 UTC 시간 값인 Number를 반환합니다. String의 내용에 따라 String은 로컬 시간, UTC 시간 또는 다른 시간대의 시간으로 해석될 수 있습니다. 함수는 먼저 확장 연도를 포함하여 날짜 시간 문자열 형식(21.4.1.32)에 설명된 형식에 따라 String을 파싱하려고 합니다. String이 해당 형식을 준수하지 않으면 함수는 구현체 고유 휴리스틱 또는 구현체 고유 날짜 형식으로 대체할 수 있습니다. 인식할 수 없거나 범위를 벗어난 형식 요소 값을 포함하는 String은 이 함수가 NaN을 반환하게 해야 합니다.
String이 날짜 시간 문자열 형식을 준수하면 존재하지 않는 형식 요소 대신 대체 값이 사용됩니다. MM 또는 DD 요소가 없으면 "01"을 사용합니다. HH, mm 또는 ss 요소가 없으면 "00"을 사용합니다. sss 요소가 없으면 "000"을 사용합니다. UTC 오프셋 표현이 없으면 날짜 전용 형식은 UTC 시간으로 해석하고 날짜-시간 형식은 로컬 시간으로 해석합니다.
x가 특정 ECMAScript 구현체에서 밀리초 값이 0인 임의의 Date이고 참조되는 모든 프로퍼티가 초기 값을 갖는다면 다음 표현식은 모두 해당 구현체에서 동일한 숫자 값을 생성해야 합니다:
앞의 세 표현식과 동일한 Number 값을 생성해야 할 필요가 없으며, 일반적으로 날짜 시간 문자열 형식을 준수하지 않고 해당 구현체의 toString 또는 toUTCString 메서드가 생성할 수도 없는 임의의 String 값이 주어지면 이 함수가 생성하는 값은 구현체 정의입니다.
minute이 존재하지 않으면 이 메서드는 minute이 getMinutes() 값으로 존재했던 것처럼 동작합니다. second가 존재하지 않으면 second가 getSeconds() 값으로 존재했던 것처럼 동작합니다. millisecond가 존재하지 않으면 millisecond가 getMilliseconds() 값으로 존재했던 것처럼 동작합니다.
minute이 존재하지 않으면 이 메서드는 minute이 getUTCMinutes() 값으로 존재했던 것처럼 동작합니다. second가 존재하지 않으면 second가 getUTCSeconds() 값으로 존재했던 것처럼 동작합니다. millisecond가 존재하지 않으면 millisecond가 getUTCMilliseconds() 값으로 존재했던 것처럼 동작합니다.
second가 존재하지 않으면 이 메서드는 second가 getUTCSeconds() 값으로 존재했던 것처럼 동작합니다. millisecond가 존재하지 않으면 이 메서드는 millisecond가 getUTCMilliseconds()가 반환하는 값으로 존재했던 것처럼 동작합니다.
21.4.4.33 Date.prototype.setUTCMonth ( month [ , day ] )
timeZoneName을 빈 String 또는 코드 단위 0x0020 (SPACE), 코드 단위 0x0028 (LEFT PARENTHESIS), 구현체 정의 시간대 이름 및 코드 단위 0x0029 (RIGHT PARENTHESIS)의 문자열 연결 중 하나인 구현체 정의 문자열로 둡니다.
offsetSign, offsetHour, offsetMinute 및 timeZoneName의 문자열 연결을 반환합니다.
21.4.4.41.4 ToDateString ( tv )
추상 연산 ToDateString. 인수 tv ((정수인 Number 또는 NaN)). 반환값: String. 호출되면 다음 단계를 수행한다.
weekday, ",", 코드 단위 0x0020 (SPACE), day, 코드 단위 0x0020 (SPACE), month, 코드 단위 0x0020 (SPACE), yearSign, paddedYear, 코드 단위 0x0020 (SPACE) 및 TimeString(tv)의 문자열 연결을 반환합니다.
21.4.4.45 Date.prototype [ %Symbol.toPrimitive% ] ( hint )
이 메서드는 ECMAScript 언어 연산자가 Date를 원시 값으로 변환하기 위해 호출합니다. hint에 허용되는 값은 "default", "number" 및 "string"입니다. Date는 "default"를 "string"과 동등하게 취급한다는 점에서 내장 ECMAScript 객체 중 유일합니다. 다른 모든 내장 ECMAScript 객체는 "default"를 "number"와 동등하게 취급합니다.