diff --git a/spec.html b/spec.html index 1c4ec30e619..c7d162f74cb 100644 --- a/spec.html +++ b/spec.html @@ -1161,7 +1161,10 @@

The String Type

ASCII Case Insensitivity

-

The String values used to identify time zone identifiers, as well as many other identifiers specified in ECMA-402 such as locales, currencies, scripts, and calendars, as are interpreted in an ASCII-case-insensitive manner, treating the code units 0x0041 through 0x005A (corresponding to Unicode characters LATIN CAPITAL LETTER A through LATIN CAPITAL LETTER Z) as equivalent to the corresponding code units 0x0061 through 0x007A (corresponding to Unicode characters LATIN SMALL LETTER A through LATIN SMALL LETTER Z), both inclusive. No other case folding equivalences are applied.

+

+ The String values used as time zone identifiers, as well as many other identifiers specified in ECMA-402 such as locales, currencies, scripts, and calendars, as are interpreted in an ASCII-case-insensitive manner, treating the code units 0x0041 through 0x005A (corresponding to Unicode characters LATIN CAPITAL LETTER A through LATIN CAPITAL LETTER Z) as equivalent to the corresponding code units 0x0061 through 0x007A (corresponding to Unicode characters LATIN SMALL LETTER A through LATIN SMALL LETTER Z), both inclusive. + No other case folding equivalences are applied. +

For example, *"ß"* (U+00DF) must not match or be mapped to *"SS"* (U+0053, U+0053). *"ı"* (U+0131) must not match or be mapped to *"I"* (U+0049). @@ -32120,16 +32123,20 @@

Time Zone Identifiers

ECMAScript identifies time zones using the Zone and Link names of the IANA Time Zone Database https://www.iana.org/time-zones/. - These names are called time zone identifiers, and are Strings composed entirely of characters from the Basic Latin Unicode block. + These names are called time zone identifiers, and are Strings composed entirely of characters from the Unicode Basic Latin block. Time zone identifiers are case-insensitive and so are compared using ASCII case-insensitive comparisons, but time zone identifiers returned by ECMAScript built-in objects always use the casing found in the IANA Time Zone Database. - A primary time zone identifier is a Zone name, and a non-primary time zone identifier is a Link name, respectively, in the IANA Time Zone Database except as specifically overridden by AvailableTimeZoneIdentifiers. + A primary time zone identifier is a Zone name, and a non-primary time zone identifier is a Link name, respectively, in the IANA Time Zone Database except as specifically overridden by AvailableTimeZoneIdentifiers. The set of Zone and Link identifiers that are supported by an ECMAScript implementation are called available time zone identifiers.

-

In the IANA Time Zone Database, the UTC time zone is represented by the Zone *"Etc/UTC"*, but for backwards compatibility and brevity reasons, *"UTC"* is the primary identifier used for this time zone in ECMAScript, while *"Etc/UTC"*, *"GMT"*, and *"Etc/GMT"* are all non-primary identifiers that resolve to *"UTC"*.

+

+ In the IANA Time Zone Database, the UTC time zone is represented by the Zone *"Etc/UTC"*, and is distinct from the Zone *"Etc/GMT"*. + For historical reasons, ECMAScript uses *"UTC"* as the primary identifier for the former Zone and does not recognize the latter Zone as distinct, instead requiring treatment of *"Etc/UTC"*, *"Etc/GMT"*, and *"GMT"* (if available) as non-primary identifiers that resolve to *"UTC"*. + This is the only deviation from the IANA Time Zone Database that is required of an ECMAScript implementation. +

- Time zone aware ECMAScript implementations support *"UTC"* and all other Zone and Link names (and only such names) from the IANA Time Zone Database, the mapping between Link names and corresponding Zone names, and the UTC offsets and transitions associated with Zone names that represent local political rules for that time zone. + Time zone aware ECMAScript implementations support *"UTC"* and all other Zone and Link names (and only such names) from the IANA Time Zone Database, the mapping between Link names and corresponding Zone names, and the UTC offsets and transitions associated with Zone names that represent local political rules for that time zone. An ECMAScript implementation that includes the ECMA-402 Internationalization API must be time zone aware. However, it is recommended that all ECMAScript implementations be time zone aware. Furthermore, even non-time zone aware implementations that do not support the entire IANA Time Zone Database are still recommended to use IANA Time Zone Database identifiers to represent time zones. @@ -32252,7 +32259,7 @@

Time Zone Identifier Record

If [[Identifier]] is a primary time zone identifier, then [[Identifier]] will be [[PrimaryIdentifier]].

-

In time zone aware implementations it is required (and for all other implementations, recommended) that both [[Identifier]] and [[PrimaryIdentifier]] be a Zone or Link name from the IANA Time Zone Database https://www.iana.org/time-zones/.

+

It is required for time zone aware implementations (and recommended for all others) to use Zone and Link names from the IANA Time Zone Database https://www.iana.org/time-zones/ for both [[Identifier]] and [[PrimaryIdentifier]].

@@ -32291,7 +32298,7 @@

AvailableTimeZoneIdentifiers ( ): a List of Time Zone Identifier Records

- +

HostTimeZoneIdentifier ( ): a String

description
@@ -32304,9 +32311,9 @@

HostTimeZoneIdentifier ( ): a String

1. If the implementation only supports the UTC time zone, return *"UTC"*. 1. Let _hostTimeZoneString_ be the String representing the host environment's current time zone, either a time zone identifier or a UTC offset string. 1. If IsTimeZoneOffsetString(_hostTimeZoneString_) is *true*, return _hostTimeZoneString_. - 1. Assert: GetAvailableTimeZoneIdentifier(_hostTimeZoneString_) is not ~empty~. - 1. Assert: GetAvailableTimeZoneIdentifier(_hostTimeZoneString_).[[Identifier]] is GetAvailableTimeZoneIdentifier(_hostTimeZoneString_).[[PrimaryIdentifier]]. - 1. Return _hostTimeZoneString_. + 1. Let _timeZoneIdentifierRecord_ be GetAvailableTimeZoneIdentifier(_hostTimeZoneString_). + 1. Assert: _timeZoneIdentifierRecord_ is not ~empty~. + 1. Return _timeZoneIdentifierRecord_.[[PrimaryIdentifier]]. @@ -48915,6 +48922,7 @@

Host Hooks

HostMakeJobCallback(...)

HostPromiseRejectionTracker(...)

InitializeHostDefinedRealm(...)

+

HostTimeZoneIdentifier(...)