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
Note
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 배정밀도 이진 표현에서 가장 작은 가능한 값은 비정규(denormalized) 수이다. 구현이 비정규 값을 지원하지 않는다면 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 이면, (항상 지수 표기로 출력된다는 점을 제외하면 ToString 과 같이) Number 를 유일하게 지정하는 데 필요한 만큼의 유효숫자 자릿수를 포함한다.
m 을 f + 1 번의 코드 유닛 0x0030 (DIGIT ZERO) 로 구성된 String 값으로 둔다.
e = 0.
그렇지 않으면,
fractionDigits 가 undefined 가 아니면
10f ≤ n < 10f + 1 이고 n × 10e - f - x 가 0 에 가장 가깝도록 하는 정수 e, n 을 둔다. 그러한 ( e, n ) 이 두 개 있으면 n × 10e - f 가 더 큰 것을 고른다.
그렇지 않으면,
ff ≥ 0, 10ff ≤ n < 10ff + 1, 𝔽(n × 10e - ff) 가 𝔽(x), 그리고 ff 가 가능한 한 작은 정수인 e, n, ff 를 둔다. 이때 n 의 십진 표현은 ff + 1 자리이며, n 은 10 으로 나누어떨어지지 않고, n 의 최하위 자리는 유일하게 결정되지 않을 수 있다.
f = ff.
m 을 n 의 십진 표현의 자릿수들(선행 0 없이 순서대로)로 구성된 String 값으로 둔다.
f ≠ 0 이면
a = m 의 첫 코드 유닛.
b = 나머지 f 개의 코드 유닛.
m = a, ".", b 의 문자열 연결.
e = 0 이면
c = "+".
d = "0".
그렇지 않으면,
e > 0 이면
c = "+".
그렇지 않으면
단언: e < 0.
c = "-".
e = -e.
d = e 의 십진 표현 자릿수들(선행 0 없이)로 구성된 String 값.
m = m, "e", c, d 의 문자열 연결.
s 와 m 의 문자열 연결을 반환한다.
Note
위 규칙이 요구하는 것보다 더 정확한 변환을 제공하는 구현은 step 10.b.i 의 다음 대안 버전을 지침으로 사용하는 것이 권장된다:
f ≥ 0, 10f ≤ n < 10f + 1, 𝔽(n × 10e - f) 가 𝔽(x), 그리고 f 가 가능한 한 작은 정수인 e, n, f 를 둔다. n 의 후보가 여러 개면 𝔽(n × 10e - f) 가 𝔽(x) 에 가장 가까운 값을 선택한다. 그런 후보가 두 개면 짝수인 것을 선택한다.
이 메서드는 이 Number 값을 (유효숫자 부분 소수점 앞에 한 자리, 소수점 뒤에 precision - 1 자리)인 십진 지수 표기 또는 precision 개의 유효숫자를 갖는 십진 고정 표기 중 하나로 표현한 String 을 반환한다. precision 이 undefined 이면 대신 ToString 을 호출한다.
The abstract operation ThisNumberValue takes argument value (ECMAScript 언어 값) and returns Number 를 담은 정상 completion 또는 throw completion. It performs the following steps when called:
value 가 Number 이면 value 반환.
value 가 Object 이고 [[NumberData]] 내부 슬롯을 가지면
n = value.[[NumberData]].
단언: n 은 Number.
n 반환.
TypeError 예외 throw.
21.1.4 Number 인스턴스의 프로퍼티 (Properties of Number Instances)
Number 인스턴스는 Number 프로토타입 객체로부터 프로퍼티를 상속하는 ordinary 객체이다. Number 인스턴스는 또한 [[NumberData]] 내부 슬롯을 가진다. [[NumberData]] 내부 슬롯은 이 Number 객체가 나타내는 Number 값이다.
The abstract operation NumberToBigInt takes argument number (a Number) and returns BigInt 를 담은 정상 completion 또는 throw completion. It performs the following steps when called:
The abstract operation ThisBigIntValue takes argument value (an ECMAScript language value) and returns BigInt 를 담은 정상 completion 또는 throw completion. It performs the following steps when called:
이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } 특성을 가진다.
21.2.4 BigInt 인스턴스의 프로퍼티 (Properties of BigInt Instances)
BigInt 인스턴스는 BigInt 프로토타입 객체로부터 프로퍼티를 상속하는 ordinary 객체이다. BigInt 인스턴스는 또한 [[BigIntData]] 내부 슬롯을 가진다. [[BigIntData]] 내부 슬롯은 해당 BigInt 객체가 나타내는 BigInt 값이다.
이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } 특성을 가진다.
21.3.2 Math 객체의 함수 프로퍼티 (Function Properties of the Math Object)
Note
acos, acosh, asin, asinh, atan, atanh, atan2, cbrt, cos, cosh, exp, expm1, hypot, log, log1p, log2, log10, pow, random, sin, sinh, tan, tanh 함수의 동작은 경계 사례에 대해 특정 결과를 요구하는 것 외에는 여기서 정확히 규정되지 않는다. 다른 인수 값에 대해서는 익숙한 수학 함수의 결과를 근사하도록 의도되며, 근사 알고리즘 선택에 다소 재량이 허용된다. 일반적인 의도는 구현자가 해당 하드웨어 플랫폼에서 C 프로그래머가 사용할 수 있는 동일한 수학 라이브러리를 ECMAScript 에도 사용할 수 있도록 하는 것이다.
이 연산은 먼저 binary32 로 변환 후 binary16 으로 변환하는 것과 다르다(이중 반올림 가능성). 예: k = 1.00048828125000022204𝔽 에 대해 Math.f16round(k) 는 1.0009765625𝔽 이지만 Math.f16round(Math.fround(k)) 는 1𝔽 이다.
모든 플랫폼이 binary64→binary16 캐스팅을 네이티브 지원하지는 않는다. MIT 라이선스 half 라이브러리 등 사용 가능. 또는 binary64→binary32 (roundTiesToEven) 후 잘못된 이중 반올림 가능성 검사, 해당 경우 mantissa 조정(odd 라운드에 해당) 후 최종 binary16 캐스팅 등으로 구현 가능.
Math.round(x) 는 항상 Math.floor(x + 0.5) 와 같지 않다. 예를 들어 x 가 -0𝔽 이거나 -0𝔽 보다 작고 -0.5𝔽 이상이면 Math.round(x) 는 -0𝔽 반환하지만 Math.floor(x + 0.5) 는 +0𝔽 를 반환. 또한 내부 반올림으로 인해 차이날 수 있다.
다음의 추상 연산들은 시간 값(21.4.1.1에서 정의됨)에 대해 동작합니다. 모든 경우에 이 함수들에 인수로 NaN이 들어오면 결과도 NaN이 됨을 유의하세요.
21.4.1.1 시간 값과 시간 범위
ECMAScript의 시간 측정은 POSIX의 시간 측정과 유사하며, 특히 전환 그레고리력(proleptic Gregorian calendar), 1970년 1월 1일 0시 UTC의 기점(epoch), 그리고 하루가 정확히 86,400초(각 초는 1000밀리초)로 구성된다는 정의를 공유합니다.
ECMAScript의 시간 값은 Number로, 밀리초 단위의 한 순간을 나타내는 유한 정수 Number이거나 특정 순간을 나타내지 않는 NaN일 수 있습니다. 24 × 60 × 60 × 1000 = 86,400,000의 배수(즉, 정수 d에 대해 86,400,000 × d)인 시간 값은 기점 이후 d일이 지난 UTC 일의 시작 순간(음수 d라면 기점 이전)을 나타냅니다. 그 외의 유한 시간 값 t는 그와 가장 가까운 이전 배수 시간 값 s를 기준으로 정의되며, s와 동일한 UTC 일 내에서 (t - s) 밀리초가 지난 순간을 나타냅니다.
시간 값은 UTC 윤초(leap seconds)를 고려하지 않습니다—양의 윤초 내의 순간을 나타내는 시간 값은 없으며, 음의 윤초로 인해 UTC 타임라인에서 제거된 순간을 나타내는 시간 값은 있습니다. 그럼에도 불구하고 시간 값의 정의는 윤초 경계에서만 불연속이 있고 그 외에는 UTC와 부분적으로 일치함을 보장합니다.
Number는 -9,007,199,254,740,992에서 9,007,199,254,740,992(21.1.2.8 및 21.1.2.6 참고)까지의 모든 정수를 정확하게 표현할 수 있습니다. 시간 값은 -8,640,000,000,000,000에서 8,640,000,000,000,000 밀리초까지의 약간 더 작은 범위를 지원합니다. 이는 1970년 1월 1일 0시 UTC 기준으로 -100,000,000일부터 100,000,000일까지의 시간 값 범위를 제공합니다.
1970년 1월 1일 0시 UTC의 정확한 순간은 시간 값 +0𝔽으로 표현됩니다.
Note
전환 그레고리력에서는 윤년이 4로 나누어떨어지고, 400으로 나누어떨어지거나 100으로 나누어떨어지지 않는 해입니다.
전환 그레고리력의 400년 주기에는 97번의 윤년이 있습니다. 평균적으로 연간 365.2425일, 즉 31,556,952,000 밀리초가 됩니다. 따라서 Number가 밀리초 단위로 정확하게 표현할 수 있는 최대 범위는 1970년 기준으로 약 -285,426년에서 285,426년입니다. 이 절에서 명시된 시간 값의 더 작은 범위는 약 -273,790년에서 273,790년(1970년 기준)입니다.
The abstract operation Day takes argument t (유한한 시간 값) and returns 정수 Number. t가 속한 날짜의 일 번호(day number)를 반환합니다. It performs the following steps when called:
The abstract operation TimeWithinDay takes argument t (유한한 시간 값) and returns +0𝔽 (포함)부터 msPerDay (제외)까지의 정수 Number. t가 속한 날짜의 시작부터 지난 밀리초 수를 반환합니다. It performs the following steps when called:
The abstract operation DaysInYear takes argument y (정수 Number) and returns 365𝔽 또는 366𝔽. y년의 일(day) 수를 반환합니다. 윤년은 366일, 그 외는 365일입니다. It performs the following steps when called:
The abstract operation DayFromYear takes argument y (정수 Number) and returns 정수 Number. y년의 첫날의 일 번호(day number)를 반환합니다. It performs the following steps when called:
The abstract operation TimeFromYear takes argument y (정수 Number) and returns 시간 값. y년의 시작 순간의 시간 값을 반환합니다. It performs the following steps when called:
The abstract operation YearFromTime takes argument t (유한한 시간 값) and returns 정수 Number. t가 속한 연도를 반환합니다. It performs the following steps when called:
TimeFromYear(y) ≤ t를 만족하는 가장 큰 정수 y를 반환합니다 (+∞에 가장 가까움).
21.4.1.9 DayWithinYear ( t )
The abstract operation DayWithinYear takes argument t (유한한 시간 값) and returns +0𝔽부터 365𝔽까지 포함하는 구간의 정수 Number. It performs the following steps when called:
The abstract operation InLeapYear takes argument t (유한한 시간 값) and returns +0𝔽 또는 1𝔽. t가 윤년 내에 있으면 1𝔽, 아니면 +0𝔽을 반환합니다. It performs the following steps when called:
The abstract operation MonthFromTime takes argument t (유한한 시간 값) and returns +0𝔽부터 11𝔽까지 포함하는 구간의 정수 Number. t가 속한 월(month)을 식별하는 Number를 반환합니다. +0𝔽은 1월, 1𝔽은 2월, … 11𝔽은 12월을 의미합니다. MonthFromTime(+0𝔽) = +0𝔽은 1970년 1월 1일 목요일에 해당합니다. It performs the following steps when called:
The abstract operation DateFromTime takes argument t (유한한 시간 값) and returns 1𝔽부터 31𝔽까지 포함하는 구간의 정수 Number. t가 속한 월의 날짜(day of month)를 반환합니다. It performs the following steps when called:
The abstract operation WeekDay takes argument t (유한한 시간 값) and returns +0𝔽부터 6𝔽까지 포함하는 구간의 정수 Number. t가 속한 요일(week day)을 식별하는 Number를 반환합니다. +0𝔽은 일요일, 1𝔽은 월요일, … 6𝔽은 토요일을 의미합니다. WeekDay(+0𝔽) = 4𝔽은 1970년 1월 1일 목요일에 해당합니다. It performs the following steps when called:
The abstract operation HourFromTime takes argument t (유한한 시간 값) and returns +0𝔽부터 23𝔽까지 포함하는 구간의 정수 Number. t가 속한 시(hour)를 반환합니다. It performs the following steps when called:
The abstract operation MinFromTime takes argument t (유한한 시간 값) and returns +0𝔽부터 59𝔽까지 포함하는 구간의 정수 Number. t가 속한 분(minute)을 반환합니다. It performs the following steps when called:
The abstract operation SecFromTime takes argument t (유한한 시간 값) and returns +0𝔽부터 59𝔽까지 포함하는 구간의 정수 Number. It performs the following steps when called:
The abstract operation msFromTime takes argument t (유한한 시간 값) and returns +0𝔽부터 999𝔽까지 포함하는 구간의 정수 Number. It performs the following steps when called:
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. It performs the following steps when called:
ECMAScript에서 시간대는 시간대 식별자로 표현되며, 이는 0x0000~0x007F의 코드 유닛으로만 구성된 문자열입니다.
ECMAScript 구현이 지원하는 시간대는 사용 가능한 명명된 시간대일 수 있고, 이는 AvailableNamedTimeZoneIdentifiers가 반환하는 시간대 식별자 레코드의 [[Identifier]] 필드로 표현됩니다. 또는 오프셋 시간대일 수 있고, 이는 IsTimeZoneOffsetString이 true를 반환하는 문자열로 표현됩니다.
기본 시간대 식별자는 사용 가능한 명명된 시간대의 대표 식별자입니다.
비기본 시간대 식별자는 명명된 시간대를 나타내지만 기본 식별자가 아닌 식별자입니다.
사용 가능한 명명된 시간대 식별자는 기본 또는 비기본 식별자입니다.
각 사용 가능한 명명된 시간대 식별자는 정확히 하나의 명명된 시간대와 연결됩니다.
각 명명된 시간대는 정확히 하나의 기본 시간대 식별자와 0개 이상의 비기본 식별자와 연결됩니다.
ECMAScript 구현은 "UTC" 식별자를 가진 명명된 시간대를 지원해야 하며, 이는 UTC 시간대의 기본 식별자여야 합니다.
추가로, 구현은 다른 명명된 시간대를 임의로 지원할 수 있습니다.
ECMA-402 국제화 API 명세의 시간대 요구 사항을 따르는 구현은 시간대 지원 구현(time zone aware)이라고 합니다.
시간대 지원 구현은 IANA Time Zone Database의 Zone 및 Link 이름에 해당하는 명명된 시간대를 지원해야 하며, 오직 그러한 이름만 지원해야 합니다.
시간대 지원 구현에서는 기본 식별자가 Zone 이름, 비기본 식별자가 Link 이름에 해당합니다(ECMA-402에서 특별히 재정의한 경우 제외).
전체 IANA Time Zone Database를 지원하지 않더라도 IANA 이름을 식별자로 사용하는 것이 권장됩니다.
The implementation-defined abstract operation GetNamedTimeZoneEpochNanoseconds takes arguments timeZoneIdentifier (문자열), 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 리스트.
입력값이 음의 시간대 전환(예: 서머타임 종료나 시간대 오프셋 감소) 때문에 지역 시간이 두 번 발생하면, 반환 리스트에 두 개 이상의 요소가 들어가고 오름차순으로 정렬됩니다.
입력값이 양의 시간대 전환(예: 서머타임 시작이나 시간대 오프셋 증가) 때문에 지역 시간이 건너뛰어진 경우, 반환 리스트는 비어 있습니다.
그 외에는 반환 리스트에 하나의 요소가 들어갑니다.
지역 정치적 규칙이 없는 ECMAScript 구현에서 사용하는 GetNamedTimeZoneEpochNanoseconds 기본 구현은 다음과 같은 단계로 동작합니다:
2017년 11월 5일 America/New_York의 오전 1:30은 두 번 반복되므로, GetNamedTimeZoneEpochNanoseconds("America/New_York", 2017, 11, 5, 1, 30, 0, 0, 0, 0)은 길이 2인 리스트를 반환하며 첫 번째 요소는 05:30 UTC(미국 동부 일광절약시 UTC-04:00의 01:30)에, 두 번째 요소는 06:30 UTC(미국 동부 표준시 UTC-05:00의 01:30)에 해당합니다.
2017년 3월 12일 America/New_York의 오전 2:30은 존재하지 않으므로, GetNamedTimeZoneEpochNanoseconds("America/New_York", 2017, 3, 12, 2, 30, 0, 0, 0, 0)은 빈 리스트를 반환합니다.
The implementation-defined abstract operation GetNamedTimeZoneOffsetNanoseconds takes arguments timeZoneIdentifier (문자열) and epochNanoseconds (BigInt) and returns 정수.
반환되는 정수는 timeZoneIdentifier로 지정된 명명된 시간대에서, epochNanoseconds에 해당하는 순간의 UTC로부터의 오프셋(나노초 단위)을 나타냅니다.
지역 정치적 규칙이 없는 ECMAScript 구현에서 사용하는 기본 구현은 다음과 같이 동작합니다:
NOTE: 기본 식별자를 얻기 위해 identifier를 반복적으로 resolve해야 할 수도 있다.
record를 시간대 식별자 레코드 { [[Identifier]]: identifier, [[PrimaryIdentifier]]: primary }로 한다.
result에 record를 추가한다.
Assert: result에 [[Identifier]]가 "UTC"이고 [[PrimaryIdentifier]]도 "UTC"인 레코드 r가 포함됨을 보장한다.
result를 반환한다.
21.4.1.24 SystemTimeZoneIdentifier ( )
The implementation-defined abstract operation SystemTimeZoneIdentifier takes no arguments and returns 문자열. It performs the following steps when called:
NOTE: 다음 단계는 t가 음의 시간대 전환(예: 서머타임 종료나 시간대 오프셋 감소)에서 지역 시간이 여러 번 반복되거나, 양의 시간대 전환(예: 서머타임 시작이나 시간대 오프셋 증가)에서 지역 시간이 건너뛰어진 경우에, 전환 직전의 시간대 오프셋을 사용해 t를 해석할 수 있도록 한다.
possibleInstants가 비어 있지 않으면
disambiguatedInstant를 possibleInstants[0]로 한다.
그렇지 않으면,
NOTE: t가 양의 시간대 전환에서 건너뛰어진 지역 시간을 나타낸다(예: 서머타임 시작이나 시간대 오프셋 증가).
입력 t는 명목상 시간 값이지만, 어떤 Number 값도 될 수 있습니다.
알고리즘은 t를 시간 값 범위로 제한해서는 안 되며, 지역 UTC 오프셋에 관계없이 경계값에 해당하는 입력도 지원할 수 있어야 합니다.
예를 들어, 최대 시간 값은 8.64 × 1015으로 "+275760-09-13T00:00:00Z"에 대응합니다.
해당 순간의 지역 시간대 오프셋이 UTC보다 1시간 빠른 환경에서는, 입력값이 8.64 × 1015 + 3.6 × 106이 되고 이는 "+275760-09-13T01:00:00+01:00"에 해당합니다.
2017년 11월 5일 America/New_York의 오전 1:30은 두 번 반복되지만, 반드시 1:30 AM UTC-04로 해석되어야 하며 1:30 AM UTC-05로 해석되어서는 안 됩니다.
UTC(TimeClip(MakeDate(MakeDay(2017, 10, 5), MakeTime(1, 30, 0, 0))))에서 offsetMs 값은 -4 × msPerHour입니다.
2017년 3월 12일 America/New_York의 오전 2:30은 존재하지 않지만, 반드시 2:30 AM UTC-05(동일한 3:30 AM 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.27 MakeTime ( hour, min, sec, ms )
The abstract operation MakeTime takes arguments hour (Number), min (Number), sec (Number), and ms (Number) and returns Number. It performs the following steps when called:
MakeTime의 연산은 부동소수점 연산(floating-point arithmetic)으로, 결합법칙이 성립하지 않으므로 반드시 올바른 순서로 연산해야 합니다.
21.4.1.28 MakeDay ( year, month, date )
The abstract operation MakeDay takes arguments year (Number), month (Number), and date (Number) and returns Number. It performs the following steps when called:
ECMAScript는 ISO 8601 달력 날짜 확장 형식을 단순화한 날짜-시간 문자열 교환 형식을 정의합니다. 형식은 다음과 같습니다: YYYY-MM-DDTHH:mm:ss.sssZ
각 요소의 의미는 다음과 같습니다:
YYYY
전환 그레고리력의 연도. 0000~9999의 4자리 십진수, 또는 확장 연도(expanded year)로서 "+" 또는 "-" 뒤에 6자리 십진수.
-
"-" (하이픈)은 문자열에 두 번 그대로 나타납니다.
MM
연도의 월(month). 01(1월)~12(12월)까지 두 자리 십진수.
DD
월의 날짜(day). 01~31의 두 자리 십진수.
T
"T"는 문자열에 그대로 나타나며, 시간 요소의 시작임을 나타냅니다.
HH
자정 이후 지난 전체 시간(hour) 수. 00~24의 두 자리 십진수.
:
":" (콜론)은 문자열에 두 번 그대로 나타납니다.
mm
시간(hour) 시작 이후 지난 전체 분(minute) 수. 00~59의 두 자리 십진수.
ss
분(minute) 시작 이후 지난 전체 초(second) 수. 00~59의 두 자리 십진수.
.
"." (점)은 문자열에 그대로 나타납니다.
sss
초(second) 시작 이후 지난 전체 밀리초(millisecond) 수. 세 자리 십진수.
Z
UTC 오프셋 표현. "Z" (오프셋 없는 UTC), 혹은 "+" 또는 "-" 뒤에 시간 표현 HH:mm (UTC 앞 또는 뒤의 지역 시간을 나타내는 시간대 오프셋 문자열 형식의 부분집합)
이 형식은 날짜만을 포함하는 형태도 지원합니다:
YYYY
YYYY-MM
YYYY-MM-DD
또한 위의 날짜만 형식 뒤에 다음 시간 형식이 바로 붙고 선택적 UTC 오프셋 표현이 뒤따르는 “날짜-시간” 형식도 지원합니다:
THH:mm
THH:mm:ss
THH:mm:ss.sss
형식에 맞지 않거나 범위를 벗어난 요소를 포함한 문자열은 이 형식의 유효한 인스턴스가 아닙니다.
Note 1
모든 날짜는 자정으로 시작하고 자정으로 끝나므로, 00:00과 24:00 표기법 모두 한 날짜에 연관된 두 자정을 구분할 수 있습니다. 즉, 1995-02-04T24:00과 1995-02-05T00:00은 정확히 같은 시점을 의미합니다. 후자의 형식을 “달력 날짜의 끝”으로 해석하는 것은 ISO 8601과 일치합니다(이 명세는 시간 구간을 설명할 때만 이 표기를 허용하며 단일 시점 표현에는 허용하지 않음).
Note 2
CET, EST 등과 같은 민간 시간대 약어에 대한 국제 표준은 없으며, 약어가 서로 다른 두 시간대를 동시에 나타낼 수도 있습니다. 이런 이유로 ISO 8601과 이 형식 모두 시간대 오프셋을 숫자 표현으로 지정합니다.
21.4.1.32.1 확장 연도
1970년 1월 1일 기준 약 273,790년 전후의 전체 시간 값 범위를 나타내려면 0년 이전 또는 9999년 이후의 연도 표현이 필요합니다(21.4.1.1). ISO 8601은 연도 표현의 확장을 허용하지만, 정보 교환 당사자 간의 합의가 있을 때만 허용합니다. ECMAScript 단순화 형식에서는 확장 연도 표현이 6자리 숫자로 되어야 하며 항상 + 또는 - 기호가 붙습니다. 0년은 양수로 간주하고 반드시 + 기호를 붙여야 합니다. -000000 형식의 0년 표현은 유효하지 않습니다. 확장 연도가 시간 값 범위를 벗어나는 경우, 날짜-시간 문자열 형식과 일치하는 문자열이라도 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.33 시간대 오프셋 문자열 형식
ECMAScript는 ISO 8601에서 파생된 UTC 오프셋의 문자열 교환 형식을 정의합니다.
이 형식은 다음 문법으로 설명됩니다.
이 함수는 인수에 ToString 연산자를 적용한다. ToString 결과가 갑작스런 완료라면 즉시 Completion Record를 반환한다. 그렇지 않으면, 이 함수는 결과 문자열을 날짜와 시간으로 해석하여 해당 날짜와 시간에 해당하는 UTC 시간 값을 Number로 반환한다. 문자열의 내용에 따라 지역 시간, UTC 시간, 또는 다른 시간대의 시간으로 해석될 수 있다. 함수는 먼저 Date Time String Format (21.4.1.32)에 설명된 형식(확장된 연도 포함)에 따라 문자열을 파싱하려 시도한다. 문자열이 해당 형식에 맞지 않으면 구현별 휴리스틱 또는 구현별 날짜 형식으로 대체할 수 있다. 인식 불가하거나 형식 요소 값이 범위를 벗어난 문자열은 이 함수가 NaN을 반환하게 한다.
문자열이 Date Time String Format에 맞는 경우, 대체 값이 없는 형식 요소에는 대체 값이 사용된다. MM 또는 DD 요소가 없으면 "01"이 사용된다. HH, mm, ss 요소가 없으면 "00"이 사용된다. sss 요소가 없으면 "000"이 사용된다. UTC 오프셋 표현이 없으면 날짜만 있는 형식은 UTC로, 날짜-시간 형식은 지역 시간으로 해석된다.
어떤 ECMAScript 구현에서 밀리초가 0인 Date x에 대해 다음 모든 표현식은 모든 관련 프로퍼티가 초기값일 때 동일한 숫자 값을 반환해야 한다:
앞의 세 표현식과 동일한 Number 값을 반환할 필요는 없으며, 일반적으로 이 함수가 Date Time String Format (21.4.1.32)에 맞지 않고 해당 구현에서 toString 또는 toUTCString 메서드로 생성할 수 없는 문자열 값을 받으면 반환 값은 구현에 따라 달라진다.
weekday, ",", 코드 유닛 0x0020(공백), day, 코드 유닛 0x0020(공백), month, 코드 유닛 0x0020(공백), yearSign, paddedYear, 코드 유닛 0x0020(공백), TimeString(tv)를 차례로 연결한 문자열을 반환한다.
21.4.4.45 Date.prototype [ %Symbol.toPrimitive% ] ( hint )
이 메서드는 ECMAScript 언어 연산자가 Date를 원시 값으로 변환할 때 호출된다. hint에 허용되는 값은 "default", "number", "string"이다. Date는 내장 ECMAScript 객체 중 유일하게 "default"를 "string"과 동등하게 취급한다. 다른 내장 객체는 "default"를 "number"와 동등하게 취급한다.