Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

`Intl.DateTimeFormat().resolvedOptions().timeZone` is `undefined` when `TZ` is a POSIX offset such as `UTC+3`

Ouverte
#66,251 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
45/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
javascript, nodejs

Piste de recherche

The bug is in V8's JSDateTimeFormat::TimeZoneId, which returns undefined when ICU cannot map a POSIX offset to a canonical ID. Start by examining src/objects/js-date-time-format.cc in the Node.js or V8 repository. Look for where icu::TimeZone::getCanonicalID is called and how it handles offset strings. Test with TZ=UTC+3 to reproduce, and check if the fix involves returning an offset string like "-03:00" as per ECMA-262. Run existing intl tests to ensure changes don't break other time zone handling.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Version

v26.5.1 (V8 14.6.202.34-node.24, ICU 78.3). Also reproduces on v22.17.1, v24.11.0 and v25.4.0.

Platform

Linux 7.0.0-31-generic x86_64

Subsystem

intl

What steps will reproduce the bug?
$ TZ=UTC+3 node -p 'Intl.DateTimeFormat().resolvedOptions().timeZone'
undefined
$ TZ=UTC+3 node -p 'new Date().getTimezoneOffset()'
180

TZ=UTC-2 gives undefined as well, with an offset of -120. IANA names are unaffected (TZ=Europe/Paris gives "Europe/Paris", TZ=EST5EDT gives "America/New_York").

How often does it reproduce? Is there a required condition?

Always, when TZ is a POSIX offset string such as UTC+3 that ICU cannot map to a time zone ID.

What is the expected behavior? Why is that the expected behavior?

A string. ECMA-262 SystemTimeZoneIdentifier "returns a String", either a primary time zone identifier or an offset time zone identifier, so here "-03:00" (POSIX UTC+3 is three hours west of UTC, matching getTimezoneOffset() === 180). Formatting already knows the offset: new Intl.DateTimeFormat("en", { timeZoneName: "short" }).format(0) gives 12/31/1969, GMT-3.

What do you see instead?

undefined. Code that keys anything on the zone name (caches, logs, Intl.DateTimeFormat(undefined, { timeZone })) sees the same value for every such offset.

Additional information

The undefined comes from V8's JSDateTimeFormat::TimeZoneId, which returns undefined when icu::TimeZone::getCanonicalID fails, "when the time_zone is neither a known system time zone ID nor a valid custom time zone ID": https://github.com/v8/v8/blob/36de2a2334c9129db7f6fe0db76fd7d5fa64df78/src/objects/js-date-time-format.cc#L612-L635. So this may need forwarding to V8. For comparison, Bun 1.4.0 returns "UTC" in the same environment.

Related but different: #50301 (macOS Sonoma), #26880 (/etc/localtime symlink).

Langage dominant
JavaScript
Étoiles
122k
Forks
37.4k
Merge moyen
4 j 2 h
PR mergées (30 j)
277

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de nodejs/node

Toutes les issues de nodejs/node

Issues similaires

Plus d'issues JavaScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.