Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

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

オープン
#66,251 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
45/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
javascript, nodejs

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

説明

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).

主要言語
JavaScript
スター
122k
フォーク
37.4k
平均マージ
4日 2時間
マージ済み PR(30日)
277

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

nodejs/node のほかの issue

nodejs/node の issue をすべて見る

似ている issue

JavaScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。