Skip to content

Fixes various inconsistencies and outdated mappings in timezone data #585

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 26 additions & 13 deletions packages/timezone-data/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,16 @@ const timezoneData: {name: string; label: string}[] = [
},
{
name: 'America/Tijuana',
label: '(GMT -8:00) Chihuahua, La Paz, Mazatlan'
label: '(GMT -8:00) Tijuana'
},
{
name: 'America/Los_Angeles',
label: '(GMT -8:00) Pacific Time (US & Canada); Tijuana'
label: '(GMT -8:00) Pacific Time (US & Canada)'
},
{
name: 'America/Mazatlan',
label: '(GMT -7:00) La Paz, Mazatlan'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: it might make sense to put the city that matches the time zone first (especially since there's two different "La Paz" in this file), unless there's a reason for doing it this way i'm not aware of.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the suggestion. The timezone isn’t exposed to the user in the frontend, only the label is. The cities in the label follow alphabetical order, and putting Mazatlan in front would break this order. Was there a specific reason you think putting the city matching the timezone first would work better here?

},
{
name: 'America/Phoenix',
label: '(GMT -7:00) Arizona'
Expand All @@ -27,6 +31,10 @@ const timezoneData: {name: string; label: string}[] = [
name: 'America/Denver',
label: '(GMT -7:00) Mountain Time (US & Canada)'
},
{
name: 'America/Chihuahua',
label: '(GMT -6:00) Chihuahua'
},
{
name: 'America/Costa_Rica',
label: '(GMT -6:00) Central America'
Expand Down Expand Up @@ -57,7 +65,7 @@ const timezoneData: {name: string; label: string}[] = [
},
{
name: 'America/Caracas',
label: '(GMT -4:00) Caracas, La Paz'
label: '(GMT -4:00) Caracas, La Paz, Georgetown'
},
{
name: 'America/Halifax',
Expand All @@ -73,7 +81,7 @@ const timezoneData: {name: string; label: string}[] = [
},
{
name: 'America/Argentina/Buenos_Aires',
label: '(GMT -3:00) Buenos Aires, Brasilia, Georgetown'
label: '(GMT -3:00) Buenos Aires, Brasilia'
},
{
name: 'America/Noronha',
Expand Down Expand Up @@ -175,6 +183,10 @@ const timezoneData: {name: string; label: string}[] = [
name: 'Asia/Kabul',
label: '(GMT +4:30) Kabul'
},
{
name: 'Asia/Almaty',
label: '(GMT +5:00) Almaty, Astana'
},
{
name: 'Asia/Karachi',
label: '(GMT +5:00) Islamabad, Karachi, Tashkent'
Expand All @@ -185,39 +197,40 @@ const timezoneData: {name: string; label: string}[] = [
},
{
name: 'Asia/Kolkata',
label: '(GMT +5:30) Chennai, Calcutta, Mumbai, New Delhi'
label: '(GMT +5:30) Chennai, Kolkata, Mumbai, New Delhi'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: i know this list was already existing, but same suggestion here about putting the city that matches the time zone first in the list (again, unless there's a reason for the order)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar to my earlier comment, the cities here are in alphabetical order, so putting Kolkata first would break that.

},
{
name: 'Asia/Kathmandu',
label: '(GMT +5:45) Katmandu'
name: 'Asia/Colombo',
label: '(GMT +5:30) Colombo, Sri Jayawardenepura'
},
{
name: 'Asia/Almaty',
label: '(GMT +6:00) Almaty, Novosibirsk'
name: 'Asia/Kathmandu',
label: '(GMT +5:45) Kathmandu'
},

{
name: 'Asia/Dhaka',
label: '(GMT +6:00) Astana, Dhaka, Sri Jayawardenepura'
label: '(GMT +6:00) Dhaka'
},
{
name: 'Asia/Rangoon',
label: '(GMT +6:30) Rangoon'
label: '(GMT +6:30) Yangon (Rangoon)'
},
{
name: 'Asia/Bangkok',
label: '(GMT +7:00) Bangkok, Hanoi, Jakarta'
},
{
name: 'Asia/Krasnoyarsk',
label: '(GMT +7:00) Krasnoyarsk'
label: '(GMT +7:00) Krasnoyarsk,Novosibirsk'
Comment on lines 224 to +225
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (blocking): Instead of adding Novosibirsk here to Asia/Krasnoyarsk, can we add Asia/Novosibirsk as its own item?

I did some brief reading and the history is pretty confusing, but I think they each have their own time zone identifier even if they currently observe the same times year-round.

Copy link
Author

@niranjan-uma-shankar niranjan-uma-shankar Aug 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I initially considered adding Asia/Novosibirsk as its own item, but felt the current grouping better aligns with the original intent behind this curated timezone list (see historical context section).

In short, here's my thinking:

  • The list was merged in May 2016 when Novosibirsk had a different timezone. It moved to its current timezone shortly after (in July 2016), but the change wasn’t reflected here.
  • The list is intentionally kept small to avoid overwhelming users. Extra items add up over time.
  • We already group cities that share a timezone. Examples:
    • Rome is grouped under Europe/Amsterdam, even though it has its own canonical identifier Europe/Rome.
    • Madrid is grouped under Europe/Paris, even though it has its own canonical identifier Europe/Madrid.
  • /settings has search for the timezone dropdown, so typing “Novosibirsk” will still find it even if it's grouped and not a separate item.
  • Grouping by country/timezone feels logical, and a separate entry would mainly help with auto-timezone detection, but even that could be implemented without adding new items.

That’s my reasoning, but I’m happy to revisit if you feel strongly about keeping Novosibirsk separate.

},
{
name: 'Asia/Hong_Kong',
label: '(GMT +8:00) Beijing, Chongqing, Hong Kong, Urumqi'
},
{
name: 'Asia/Irkutsk',
label: '(GMT +8:00) Irkutsk, Ulaan Bataar'
label: '(GMT +8:00) Irkutsk, Ulaanbaatar'
},
{
name: 'Asia/Singapore',
Expand Down