Presenting a list of Timezones to the user


 

I first got into timezones when I working on an calendar app which displayed various times of day which are pertinent to Jewish daily life. The app would display calculated times which of course would differ based on the timezone of the given location. As I investigated into timezones, I found them to be fairly complicated. Not all timezones are even on the hour…some are at 30 minute offsets, some at 45 minutes, and historically there have been even stranger offsets than that.

To make matters worse, there’s the whole issue of Daylight Saving Time. Apparently some places have it some don’t. Some countries have a set date for DST, some pick a new one each year depending on circumstances. And of course, DST does not mean only adding one hour. 

My research led me to what is “colloquially” known as the “Olson” database. The Olson database is a de facto standard in the world of keeping time. The most recognizable part of the way timezones are identified is the {Continent}/{Location} signature. For example, the timezone that I am in is called “America/New_York”. The Olson database tracks all historical information about timezones back at least until 1970. By timezone information, this also means transitions for DST and the GMT offset for both standard time and DST.

The best part of all of this, is that PHP 5 and up has built in support for understanding Olson timezones. This means that you all you need is the timezone id (the tzid), and you can have PHP worry about all the timezone and DST calculations.

Recently, I was working on another app which required members to select a timezone. The app is written on top of Expression Engine which contains a full blown membership system. The membership system includes a timezone setting. Let’s take a quick look at the what this look like:

Selecting a timezone in Expression Engine

Selecting a timezone in Expression Engine

Notice the checkbox that says “Daylight Saving Time”? This means that the user has to remember, every year, to select that checkbox when DST happens. Not very fun. Expression Engine is written in PHP 4, and the authors intend to keep that, stubbornly, for as long as possible.

I’m not here to wrant on Expression Engine (that’s for another time), but either way, this would not suit my purposes. I can’t rely on users remembering to “spring forward” when they have to.

The alternative is to provide a list based on the Olson database. The problem is that, as of this post, their are 560 tzid’s in the database, and they are not “friendly” nor recognizable to anybody but geeks. 

I started looking around on the Interwebs trying to see what other people came up with. There was a question on Stackoverflow.com which hit the nail on the head, but anybody answering the question missed the point completely.

Eventually I realized that I must present a list similar to Expression Engine’s list, but which has the values as Olson tzid’s. The first step was to clean up the list a little. Much of the information is redundant, and only there for historical purposes. For instance, until 2006, much of Indiana did not observe DST. After 2006, however, the story changed. This explains why there are so many Olson tzid’s with Indiana in them. However, for all practical purposes, they’re the same.

The question is, what defines them as the same? I determined the best way would be to look at the DST transition date (if applicable), and the resulting offsets and compare them. Fortunately, PHP has a function that does this…timezone_transitions_get().

My idea was to pull in all the timezones and their transistions into excel and sort them by offset, and transition dates to identify which tzids are similar. After that, to figure out a friendly name to call them.

Doing more research I found somebody made a spreadsheet which tried to map Windows timezone names to Olson tzid’s. I used this a base reference for the names I chose, although I found not all the data in that spreadsheet was accurate (one day I will submit my changes to the author). Some timezones I had to come up with my own names like “America/Havana” which has different rules for any place in its timezone. I decided to call this (GMT-05:00) Cuba for lack of anything else.

In the end, I came up with a list of about 80 or so timezones, and I’m somewhat proud of my results:

Here is the list:



























































































If anybody can offer any improvements to this or a different suggestion altogether, that would be great.

, , ,

  1. #1 by ysth at March 13th, 2009

    Nice work. One clarification: Olson timezones have historical changes back through much earlier than 1970, but they don’t create distinct timezones when the only differences were earlier than 1970.

  2. #2 by David M at May 25th, 2009

    This is a bad way to do it because you’re mapping “static” timezones (e.g. (GMT)) to geographical locations (e.g. Europe/London) which have “dyanamic” times. PHP will use the time of the location which will change throughout the year when daylight savings comes into effect. Europe/London will be GMT for 6 months but for the other 6 months it will will be BST, which is GMT+1.

    For your list to be correct you have to use the actual “static” identifiers i.e. GMT, GMT+1, etc, as the option values.

    It is also extra work for the user who will need to switch DST on/off at the appropriate time. If you do it the way I did at http://blog.boxedice.com/2009/03/21/handling-timezone-conversion-with-php-datetime/ then that will be handled automatically.

    • #3 by Avi at May 25th, 2009

      I think you misunderstood my post. I’m mapping the “friendly name” which people recognize, to the Olson name which PHP can handle. So somebody on the east coast of the US will see (GMT-05:00) Eastern Time (US & Canada) and recognize that as their timezone. Meanwhile they get the “dynamic” identifier America/New_York stored in the database. Of course now their DST will be handled automatically for them.

      • #4 by David M at May 25th, 2009

        I understand that if the user wants GMT -5 and they select that from your drop menu as “(GMT-05:00) Eastern Time (US & Canada)”, that will map to “America/New_York”. However, New York is not always GMT -5. For example, it is currently GMT -4. This means your mapping is incorrect.

        • #5 by Avi at May 25th, 2009

          In my experience people do not think in DST terms. People on the East Coast of the united states do not think of their time in the summer as GMT -4…the think of it as GMT -5 plus one extra hour.
          Either way, the important part of my list here is the friendly names…not the GMT offsets. The GMT offsets just provide a convenient way to list the timezones in an order that makes sense.
          The important part is that the user can identify their timezone in a way that makes sense to them, and I can store it in a way that makes sense to me.

  3. #6 by User_Friendly at July 9th, 2009

    Very Good work! I was looking throughout the net for TZ lists and Your beats all I’ve found! Thanks a lot!

  4. #7 by Robert Gunther at July 15th, 2009

    I like your list, will be using it on our website to allow users to set their timezone.

  5. #8 by DC at September 19th, 2009

    Excellent. I’ve gone crazy looking for a similar human-friendly list. This is the only one so far.

  6. #9 by Charles Himmer at October 7th, 2009

    Thanks for posting this. I was looking all over for this and figured somebody had done this.

  7. #10 by John at November 29th, 2009

    Fantastic! Been searching for weeks for something like this. After a bunch of different options, I’ll see if I just use this one. If only you could automatically detect the user’s setting in Javascript. Presently, I only find selection boxes which have values like “+01:00, 1″ which can be automatically set by JS…

    Thanks
    John

  8. #11 by chris at February 4th, 2010

    This is great, but since it is statically generated, it must be manually updated in the future as boundaries may change. What would be more interesting is a script that can generate the output you created.

  9. #12 by Aris at March 6th, 2010

    Thanks! I too was looking for a shortened “human-friendly” list that’s similar to the drop-down in Google Calendar and this is the closest one.

  10. #13 by Jay at October 17th, 2010

    Thanks – this was very helpful.

    By the way, you have two entries for Kamchatka.

  11. #14 by Shawn Adrian at December 11th, 2010

    Thanks so much! Btw, I made it into an array, if anyone else would like to use it:

    $list = array(
    ‘Pacific/Midway’ => ‘(GMT-11:00) Midway Island, Samoa’,
    ‘America/Adak’ => ‘(GMT-10:00) Hawaii-Aleutian’,
    ‘Etc/GMT+10′ => ‘(GMT-10:00) Hawaii’,
    ‘Pacific/Marquesas’ => ‘(GMT-09:30) Marquesas Islands’,
    ‘Pacific/Gambier’ => ‘(GMT-09:00) Gambier Islands’,
    ‘America/Anchorage’ => ‘(GMT-09:00) Alaska’,
    ‘America/Ensenada’ => ‘(GMT-08:00) Tijuana, Baja California’,
    ‘Etc/GMT+8′ => ‘(GMT-08:00) Pitcairn Islands’,
    ‘America/Los_Angeles’ => ‘(GMT-08:00) Pacific Time (US & Canada)’,
    ‘America/Denver’ => ‘(GMT-07:00) Mountain Time (US & Canada)’,
    ‘America/Chihuahua’ => ‘(GMT-07:00) Chihuahua, La Paz, Mazatlan’,
    ‘America/Dawson_Creek’ => ‘(GMT-07:00) Arizona’,
    ‘America/Belize’ => ‘(GMT-06:00) Saskatchewan, Central America’,
    ‘America/Cancun’ => ‘(GMT-06:00) Guadalajara, Mexico City, Monterrey’,
    ‘Chile/EasterIsland’ => ‘(GMT-06:00) Easter Island’,
    ‘America/Chicago’ => ‘(GMT-06:00) Central Time (US & Canada)’,
    ‘America/New_York’ => ‘(GMT-05:00) Eastern Time (US & Canada)’,
    ‘America/Havana’ => ‘(GMT-05:00) Cuba’,
    ‘America/Bogota’ => ‘(GMT-05:00) Bogota, Lima, Quito, Rio Branco’,
    ‘America/Caracas’ => ‘(GMT-04:30) Caracas’,
    ‘America/Santiago’ => ‘(GMT-04:00) Santiago’,
    ‘America/La_Paz’ => ‘(GMT-04:00) La Paz’,
    ‘Atlantic/Stanley’ => ‘(GMT-04:00) Faukland Islands’,
    ‘America/Campo_Grande’ => ‘(GMT-04:00) Brazil’,
    ‘America/Goose_Bay’ => ‘(GMT-04:00) Atlantic Time (Goose Bay)’,
    ‘America/Glace_Bay’ => ‘(GMT-04:00) Atlantic Time (Canada)’,
    ‘America/St_Johns’ => ‘(GMT-03:30) Newfoundland’,
    ‘America/Araguaina’ => ‘(GMT-03:00) UTC-3′,
    ‘America/Montevideo’ => ‘(GMT-03:00) Montevideo’,
    ‘America/Miquelon’ => ‘(GMT-03:00) Miquelon, St. Pierre’,
    ‘America/Godthab’ => ‘(GMT-03:00) Greenland’,
    ‘America/Argentina/Buenos_Aires’ => ‘(GMT-03:00) Buenos Aires’,
    ‘America/Sao_Paulo’ => ‘(GMT-03:00) Brasilia’,
    ‘America/Noronha’ => ‘(GMT-02:00) Mid-Atlantic’,
    ‘Atlantic/Cape_Verde’ => ‘(GMT-01:00) Cape Verde Is.’,
    ‘Atlantic/Azores’ => ‘(GMT-01:00) Azores’,
    ‘Europe/Belfast’ => ‘(GMT) Greenwich Mean Time : Belfast’,
    ‘Europe/Dublin’ => ‘(GMT) Greenwich Mean Time : Dublin’,
    ‘Europe/Lisbon’ => ‘(GMT) Greenwich Mean Time : Lisbon’,
    ‘Europe/London’ => ‘(GMT) Greenwich Mean Time : London’,
    ‘Africa/Abidjan’ => ‘(GMT) Monrovia, Reykjavik’,
    ‘Europe/Amsterdam’ => ‘(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna’,
    ‘Europe/Belgrade’ => ‘(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague’,
    ‘Europe/Brussels’ => ‘(GMT+01:00) Brussels, Copenhagen, Madrid, Paris’,
    ‘Africa/Algiers’ => ‘(GMT+01:00) West Central Africa’,
    ‘Africa/Windhoek’ => ‘(GMT+01:00) Windhoek’,
    ‘Asia/Beirut’ => ‘(GMT+02:00) Beirut’,
    ‘Africa/Cairo’ => ‘(GMT+02:00) Cairo’,
    ‘Asia/Gaza’ => ‘(GMT+02:00) Gaza’,
    ‘Africa/Blantyre’ => ‘(GMT+02:00) Harare, Pretoria’,
    ‘Asia/Jerusalem’ => ‘(GMT+02:00) Jerusalem’,
    ‘Europe/Minsk’ => ‘(GMT+02:00) Minsk’,
    ‘Asia/Damascus’ => ‘(GMT+02:00) Syria’,
    ‘Europe/Moscow’ => ‘(GMT+03:00) Moscow, St. Petersburg, Volgograd’,
    ‘Africa/Addis_Ababa’ => ‘(GMT+03:00) Nairobi’,
    ‘Asia/Tehran’ => ‘(GMT+03:30) Tehran’,
    ‘Asia/Dubai’ => ‘(GMT+04:00) Abu Dhabi, Muscat’,
    ‘Asia/Yerevan’ => ‘(GMT+04:00) Yerevan’,
    ‘Asia/Kabul’ => ‘(GMT+04:30) Kabul’,
    ‘Asia/Yekaterinburg’ => ‘(GMT+05:00) Ekaterinburg’,
    ‘Asia/Tashkent’ => ‘(GMT+05:00) Tashkent’,
    ‘Asia/Kolkata’ => ‘(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi’,
    ‘Asia/Katmandu’ => ‘(GMT+05:45) Kathmandu’,
    ‘Asia/Dhaka’ => ‘(GMT+06:00) Astana, Dhaka’,
    ‘Asia/Novosibirsk’ => ‘(GMT+06:00) Novosibirsk’,
    ‘Asia/Rangoon’ => ‘(GMT+06:30) Yangon (Rangoon)’,
    ‘Asia/Bangkok’ => ‘(GMT+07:00) Bangkok, Hanoi, Jakarta’,
    ‘Asia/Krasnoyarsk’ => ‘(GMT+07:00) Krasnoyarsk’,
    ‘Asia/Hong_Kong’ => ‘(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi’,
    ‘Asia/Irkutsk’ => ‘(GMT+08:00) Irkutsk, Ulaan Bataar’,
    ‘Australia/Perth’ => ‘(GMT+08:00) Perth’,
    ‘Australia/Eucla’ => ‘(GMT+08:45) Eucla’,
    ‘Asia/Tokyo’ => ‘(GMT+09:00) Osaka, Sapporo, Tokyo’,
    ‘Asia/Seoul’ => ‘(GMT+09:00) Seoul’,
    ‘Asia/Yakutsk’ => ‘(GMT+09:00) Yakutsk’,
    ‘Australia/Adelaide’ => ‘(GMT+09:30) Adelaide’,
    ‘Australia/Darwin’ => ‘(GMT+09:30) Darwin’,
    ‘Australia/Brisbane’ => ‘(GMT+10:00) Brisbane’,
    ‘Australia/Hobart’ => ‘(GMT+10:00) Hobart’,
    ‘Asia/Vladivostok’ => ‘(GMT+10:00) Vladivostok’,
    ‘Australia/Lord_Howe’ => ‘(GMT+10:30) Lord Howe Island’,
    ‘Etc/GMT-11′ => ‘(GMT+11:00) Solomon Is., New Caledonia’,
    ‘Asia/Magadan’ => ‘(GMT+11:00) Magadan’,
    ‘Pacific/Norfolk’ => ‘(GMT+11:30) Norfolk Island’,
    ‘Asia/Anadyr’ => ‘(GMT+12:00) Anadyr, Kamchatka’,
    ‘Pacific/Auckland’ => ‘(GMT+12:00) Auckland, Wellington’,
    ‘Etc/GMT-12′ => ‘(GMT+12:00) Fiji, Kamchatka, Marshall Is.’,
    ‘Pacific/Chatham’ => ‘(GMT+12:45) Chatham Islands’,
    ‘Pacific/Tongatapu’ => ‘(GMT+13:00) Nuku Alofa’,
    ‘Pacific/Kiritimati’ => ‘(GMT+14:00) Kiritimati’
    );

  12. #15 by Andrew Szczepanski at January 20th, 2011

    This helped me out a ton, as well. For that I’ll pass it on – here’s my YAML contribution:

    TimeZone:
    pacific/midway:
    olson: Pacific/Midway
    text: Midway Island, Samoa
    america/adak:
    olson: America/Adak
    text: Hawaii-Aleutian
    etc/gmt+10:
    olson: Etc/GMT+10
    text: Hawaii
    pacific/marquesas:
    olson: Pacific/Marquesas
    text: Marquesas Islands
    pacific/gambier:
    olson: Pacific/Gambier
    text: Gambier Islands
    america/anchorage:
    olson: America/Anchorage
    text: Alaska
    america/ensenada:
    olson: America/Ensenada
    text: Tijuana, Baja California
    etc/gmt+8:
    olson: Etc/GMT+8
    text: Pitcairn Islands
    america/los_angeles:
    olson: America/Los_Angeles
    text: Pacific Time (US & Canada)
    america/denver:
    olson: America/Denver
    text: Mountain Time (US & Canada)
    america/chihuahua:
    olson: America/Chihuahua
    text: Chihuahua, La Paz, Mazatlan
    america/dawson_creek:
    olson: America/Dawson_Creek
    text: Arizona
    america/belize:
    olson: America/Belize
    text: Saskatchewan, Central America
    america/cancun:
    olson: America/Cancun
    text: Guadalajara, Mexico City, Monterrey
    chile/easterisland:
    olson: Chile/EasterIsland
    text: Easter Island
    america/chicago:
    olson: America/Chicago
    text: Central Time (US & Canada)
    america/new_york:
    olson: America/New_York
    text: Eastern Time (US & Canada)
    america/havana:
    olson: America/Havana
    text: Cuba
    america/bogota:
    olson: America/Bogota
    text: Bogota, Lima, Quito, Rio Branco
    america/caracas:
    olson: America/Caracas
    text: Caracas
    america/santiago:
    olson: America/Santiago
    text: Santiago
    america/la_paz:
    olson: America/La_Paz
    text: La Paz
    atlantic/stanley:
    olson: Atlantic/Stanley
    text: Faukland Islands
    america/campo_grande:
    olson: America/Campo_Grande
    text: Brazil
    america/goose_bay:
    olson: America/Goose_Bay
    text: Atlantic Time (Goose Bay)
    america/glace_bay:
    olson: America/Glace_Bay
    text: Atlantic Time (Canada)
    america/st_johns:
    olson: America/St_Johns
    text: Newfoundland
    america/araguaina:
    olson: America/Araguaina
    text: UTC-3
    america/montevideo:
    olson: America/Montevideo
    text: Montevideo
    america/miquelon:
    olson: America/Miquelon
    text: Miquelon, St. Pierre
    america/godthab:
    olson: America/Godthab
    text: Greenland
    america/argentina/buenos_aires:
    olson: America/Argentina/Buenos_Aires
    text: Buenos Aires
    america/sao_paulo:
    olson: America/Sao_Paulo
    text: Brasilia
    america/noronha:
    olson: America/Noronha
    text: Mid-Atlantic
    atlantic/cape_verde:
    olson: Atlantic/Cape_Verde
    text: Cape Verde Is.
    atlantic/azores:
    olson: Atlantic/Azores
    text: Azores
    europe/belfast:
    olson: Europe/Belfast
    text: Greenwich Mean Time : Belfast
    europe/dublin:
    olson: Europe/Dublin
    text: Greenwich Mean Time : Dublin
    europe/lisbon:
    olson: Europe/Lisbon
    text: Greenwich Mean Time : Lisbon
    europe/london:
    olson: Europe/London
    text: Greenwich Mean Time : London
    africa/abidjan:
    olson: Africa/Abidjan
    text: Monrovia, Reykjavik
    europe/amsterdam:
    olson: Europe/Amsterdam
    text: Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
    europe/belgrade:
    olson: Europe/Belgrade
    text: Belgrade, Bratislava, Budapest, Ljubljana, Prague
    europe/brussels:
    olson: Europe/Brussels
    text: Brussels, Copenhagen, Madrid, Paris
    africa/algiers:
    olson: Africa/Algiers
    text: West Central Africa
    africa/windhoek:
    olson: Africa/Windhoek
    text: Windhoek
    asia/beirut:
    olson: Asia/Beirut
    text: Beirut
    africa/cairo:
    olson: Africa/Cairo
    text: Cairo
    asia/gaza:
    olson: Asia/Gaza
    text: Gaza
    africa/blantyre:
    olson: Africa/Blantyre
    text: Harare, Pretoria
    asia/jerusalem:
    olson: Asia/Jerusalem
    text: Jerusalem
    europe/minsk:
    olson: Europe/Minsk
    text: Minsk
    asia/damascus:
    olson: Asia/Damascus
    text: Syria
    europe/moscow:
    olson: Europe/Moscow
    text: Moscow, St. Petersburg, Volgograd
    africa/addis_ababa:
    olson: Africa/Addis_Ababa
    text: Nairobi
    asia/tehran:
    olson: Asia/Tehran
    text: Tehran
    asia/dubai:
    olson: Asia/Dubai
    text: Abu Dhabi, Muscat
    asia/yerevan:
    olson: Asia/Yerevan
    text: Yerevan
    asia/kabul:
    olson: Asia/Kabul
    text: Kabul
    asia/yekaterinburg:
    olson: Asia/Yekaterinburg
    text: Ekaterinburg
    asia/tashkent:
    olson: Asia/Tashkent
    text: Tashkent
    asia/kolkata:
    olson: Asia/Kolkata
    text: Chennai, Kolkata, Mumbai, New Delhi
    asia/katmandu:
    olson: Asia/Katmandu
    text: Kathmandu
    asia/dhaka:
    olson: Asia/Dhaka
    text: Astana, Dhaka
    asia/novosibirsk:
    olson: Asia/Novosibirsk
    text: Novosibirsk
    asia/rangoon:
    olson: Asia/Rangoon
    text: Yangon (Rangoon)
    asia/bangkok:
    olson: Asia/Bangkok
    text: Bangkok, Hanoi, Jakarta
    asia/krasnoyarsk:
    olson: Asia/Krasnoyarsk
    text: Krasnoyarsk
    asia/hong_kong:
    olson: Asia/Hong_Kong
    text: Beijing, Chongqing, Hong Kong, Urumqi
    asia/irkutsk:
    olson: Asia/Irkutsk
    text: Irkutsk, Ulaan Bataar
    australia/perth:
    olson: Australia/Perth
    text: Perth
    australia/eucla:
    olson: Australia/Eucla
    text: Eucla
    asia/tokyo:
    olson: Asia/Tokyo
    text: Osaka, Sapporo, Tokyo
    asia/seoul:
    olson: Asia/Seoul
    text: Seoul
    asia/yakutsk:
    olson: Asia/Yakutsk
    text: Yakutsk
    australia/adelaide:
    olson: Australia/Adelaide
    text: Adelaide
    australia/darwin:
    olson: Australia/Darwin
    text: Darwin
    australia/brisbane:
    olson: Australia/Brisbane
    text: Brisbane
    australia/hobart:
    olson: Australia/Hobart
    text: Hobart
    asia/vladivostok:
    olson: Asia/Vladivostok
    text: Vladivostok
    australia/lord_howe:
    olson: Australia/Lord_Howe
    text: Lord Howe Island
    etc/gmt-11:
    olson: Etc/GMT-11
    text: Solomon Is., New Caledonia
    asia/magadan:
    olson: Asia/Magadan
    text: Magadan
    pacific/norfolk:
    olson: Pacific/Norfolk
    text: Norfolk Island
    asia/anadyr:
    olson: Asia/Anadyr
    text: Anadyr, Kamchatka
    pacific/auckland:
    olson: Pacific/Auckland
    text: Auckland, Wellington
    etc/gmt-12:
    olson: Etc/GMT-12
    text: Fiji, Kamchatka, Marshall Is.
    pacific/chatham:
    olson: Pacific/Chatham
    text: Chatham Islands
    pacific/tongatapu:
    olson: Pacific/Tongatapu
    text: Nuku’alofa
    pacific/kiritimati:
    olson: Pacific/Kiritimati
    text: Kiritimati

  13. #16 by Andrew Szczepanski at January 20th, 2011

    Sorry, removed the GMT offsets from that, which isn’t good for usability. Updated it:

    TimeZone:
    pacific/midway:
    olson: Pacific/Midway
    text: (GMT-11:00) Midway Island, Samoa
    america/adak:
    olson: America/Adak
    text: (GMT-10:00) Hawaii-Aleutian
    etc/gmt+10:
    olson: Etc/GMT+10
    text: (GMT-10:00) Hawaii
    pacific/marquesas:
    olson: Pacific/Marquesas
    text: (GMT-09:30) Marquesas Islands
    pacific/gambier:
    olson: Pacific/Gambier
    text: (GMT-09:00) Gambier Islands
    america/anchorage:
    olson: America/Anchorage
    text: (GMT-09:00) Alaska
    america/ensenada:
    olson: America/Ensenada
    text: (GMT-08:00) Tijuana, Baja California
    etc/gmt+8:
    olson: Etc/GMT+8
    text: (GMT-08:00) Pitcairn Islands
    america/los_angeles:
    olson: America/Los_Angeles
    text: (GMT-08:00) Pacific Time (US & Canada)
    america/denver:
    olson: America/Denver
    text: (GMT-07:00) Mountain Time (US & Canada)
    america/chihuahua:
    olson: America/Chihuahua
    text: (GMT-07:00) Chihuahua, La Paz, Mazatlan
    america/dawson_creek:
    olson: America/Dawson_Creek
    text: (GMT-07:00) Arizona
    america/belize:
    olson: America/Belize
    text: (GMT-06:00) Saskatchewan, Central America
    america/cancun:
    olson: America/Cancun
    text: (GMT-06:00) Guadalajara, Mexico City, Monterrey
    chile/easterisland:
    olson: Chile/EasterIsland
    text: (GMT-06:00) Easter Island
    america/chicago:
    olson: America/Chicago
    text: (GMT-06:00) Central Time (US & Canada)
    america/new_york:
    olson: America/New_York
    text: (GMT-05:00) Eastern Time (US & Canada)
    america/havana:
    olson: America/Havana
    text: (GMT-05:00) Cuba
    america/bogota:
    olson: America/Bogota
    text: (GMT-05:00) Bogota, Lima, Quito, Rio Branco
    america/caracas:
    olson: America/Caracas
    text: (GMT-04:30) Caracas
    america/santiago:
    olson: America/Santiago
    text: (GMT-04:00) Santiago
    america/la_paz:
    olson: America/La_Paz
    text: (GMT-04:00) La Paz
    atlantic/stanley:
    olson: Atlantic/Stanley
    text: (GMT-04:00) Faukland Islands
    america/campo_grande:
    olson: America/Campo_Grande
    text: (GMT-04:00) Brazil
    america/goose_bay:
    olson: America/Goose_Bay
    text: (GMT-04:00) Atlantic Time (Goose Bay)
    america/glace_bay:
    olson: America/Glace_Bay
    text: (GMT-04:00) Atlantic Time (Canada)
    america/st_johns:
    olson: America/St_Johns
    text: (GMT-03:30) Newfoundland
    america/araguaina:
    olson: America/Araguaina
    text: (GMT-03:00) UTC-3
    america/montevideo:
    olson: America/Montevideo
    text: (GMT-03:00) Montevideo
    america/miquelon:
    olson: America/Miquelon
    text: (GMT-03:00) Miquelon, St. Pierre
    america/godthab:
    olson: America/Godthab
    text: (GMT-03:00) Greenland
    america/argentina/buenos_aires:
    olson: America/Argentina/Buenos_Aires
    text: (GMT-03:00) Buenos Aires
    america/sao_paulo:
    olson: America/Sao_Paulo
    text: (GMT-03:00) Brasilia
    america/noronha:
    olson: America/Noronha
    text: (GMT-02:00) Mid-Atlantic
    atlantic/cape_verde:
    olson: Atlantic/Cape_Verde
    text: (GMT-01:00) Cape Verde Is.
    atlantic/azores:
    olson: Atlantic/Azores
    text: (GMT-01:00) Azores
    europe/belfast:
    olson: Europe/Belfast
    text: (GMT) Greenwich Mean Time : Belfast
    europe/dublin:
    olson: Europe/Dublin
    text: (GMT) Greenwich Mean Time : Dublin
    europe/lisbon:
    olson: Europe/Lisbon
    text: (GMT) Greenwich Mean Time : Lisbon
    europe/london:
    olson: Europe/London
    text: (GMT) Greenwich Mean Time : London
    africa/abidjan:
    olson: Africa/Abidjan
    text: (GMT) Monrovia, Reykjavik
    europe/amsterdam:
    olson: Europe/Amsterdam
    text: (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
    europe/belgrade:
    olson: Europe/Belgrade
    text: (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
    europe/brussels:
    olson: Europe/Brussels
    text: (GMT+01:00) Brussels, Copenhagen, Madrid, Paris
    africa/algiers:
    olson: Africa/Algiers
    text: (GMT+01:00) West Central Africa
    africa/windhoek:
    olson: Africa/Windhoek
    text: (GMT+01:00) Windhoek
    asia/beirut:
    olson: Asia/Beirut
    text: (GMT+02:00) Beirut
    africa/cairo:
    olson: Africa/Cairo
    text: (GMT+02:00) Cairo
    asia/gaza:
    olson: Asia/Gaza
    text: (GMT+02:00) Gaza
    africa/blantyre:
    olson: Africa/Blantyre
    text: (GMT+02:00) Harare, Pretoria
    asia/jerusalem:
    olson: Asia/Jerusalem
    text: (GMT+02:00) Jerusalem
    europe/minsk:
    olson: Europe/Minsk
    text: (GMT+02:00) Minsk
    asia/damascus:
    olson: Asia/Damascus
    text: (GMT+02:00) Syria
    europe/moscow:
    olson: Europe/Moscow
    text: (GMT+03:00) Moscow, St. Petersburg, Volgograd
    africa/addis_ababa:
    olson: Africa/Addis_Ababa
    text: (GMT+03:00) Nairobi
    asia/tehran:
    olson: Asia/Tehran
    text: (GMT+03:30) Tehran
    asia/dubai:
    olson: Asia/Dubai
    text: (GMT+04:00) Abu Dhabi, Muscat
    asia/yerevan:
    olson: Asia/Yerevan
    text: (GMT+04:00) Yerevan
    asia/kabul:
    olson: Asia/Kabul
    text: (GMT+04:30) Kabul
    asia/yekaterinburg:
    olson: Asia/Yekaterinburg
    text: (GMT+05:00) Ekaterinburg
    asia/tashkent:
    olson: Asia/Tashkent
    text: (GMT+05:00) Tashkent
    asia/kolkata:
    olson: Asia/Kolkata
    text: (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
    asia/katmandu:
    olson: Asia/Katmandu
    text: (GMT+05:45) Kathmandu
    asia/dhaka:
    olson: Asia/Dhaka
    text: (GMT+06:00) Astana, Dhaka
    asia/novosibirsk:
    olson: Asia/Novosibirsk
    text: (GMT+06:00) Novosibirsk
    asia/rangoon:
    olson: Asia/Rangoon
    text: text: (GMT+06:30) Yangon (Rangoon)
    asia/bangkok:
    olson: Asia/Bangkok
    (GMT+07:00) Bangkok, Hanoi, Jakarta
    asia/krasnoyarsk:
    olson: Asia/Krasnoyarsk
    text: (GMT+07:00) Krasnoyarsk
    asia/hong_kong:
    olson: Asia/Hong_Kong
    text: (GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi
    asia/irkutsk:
    olson: Asia/Irkutsk
    text: (GMT+08:00) Irkutsk, Ulaan Bataar
    australia/perth:
    olson: Australia/Perth
    text: (GMT+08:00) Perth
    australia/eucla:
    olson: Australia/Eucla
    text: (GMT+08:45) Eucla
    asia/tokyo:
    olson: Asia/Tokyo
    text: (GMT+09:00) Osaka, Sapporo, Tokyo
    asia/seoul:
    olson: Asia/Seoul
    text: (GMT+09:00) Seoul
    asia/yakutsk:
    olson: Asia/Yakutsk
    text: (GMT+09:00) Yakutsk
    australia/adelaide:
    olson: Australia/Adelaide
    text: (GMT+09:30) Adelaide
    australia/darwin:
    olson: Australia/Darwin
    text: (GMT+09:30) Darwin
    australia/brisbane:
    olson: Australia/Brisbane
    text: (GMT+10:00) Brisbane
    australia/hobart:
    olson: Australia/Hobart
    text: (GMT+10:00) Hobart
    asia/vladivostok:
    olson: Asia/Vladivostok
    text: (GMT+10:00) Vladivostok
    australia/lord_howe:
    olson: Australia/Lord_Howe
    text: (GMT+10:30) Lord Howe Island
    etc/gmt-11:
    olson: Etc/GMT-11
    text: (GMT+11:00) Solomon Is., New Caledonia
    asia/magadan:
    olson: Asia/Magadan
    text: (GMT+11:00) Magadan
    pacific/norfolk:
    olson: Pacific/Norfolk
    text: (GMT+11:30) Norfolk Island
    asia/anadyr:
    olson: Asia/Anadyr
    text: (GMT+12:00) Anadyr, Kamchatka
    pacific/auckland:
    olson: Pacific/Auckland
    text: (GMT+12:00) Auckland, Wellington
    etc/gmt-12:
    olson: Etc/GMT-12
    text: (GMT+12:00) Fiji, Kamchatka, Marshall Is.
    pacific/chatham:
    olson: Pacific/Chatham
    text: (GMT+12:45) Chatham Islands
    pacific/tongatapu:
    olson: Pacific/Tongatapu
    text: (GMT+13:00) Nuku’alofa
    pacific/kiritimati:
    olson: Pacific/Kiritimati
    text: (GMT+14:00) Kiritimati

  14. #17 by Rennex at October 13th, 2011

    I do not approve of this list. First of all, timezones should relate to UTC these days, not GMT. And I’m from Helsinki (UTC+2 with EU DST rules), but the only +2 zones I see are in the Middle East or Eastern Europe, and I can’t trust them to change DST at the correct time.

    Proper timezone selection lists have typically included Helsinki, Riga, Tallinn, Athens in my zone – your list has none of them. How did you choose which names to keep and which to drop? I think capital cities should’ve been kept…

  15. #18 by Jonathan Matthews at December 15th, 2011

    I think some values in the list may be incorrect. Looking at the following it seems the Olson values have the +/- reversed:

    (GMT-10:00) Hawaii
    (GMT-08:00) Pitcairn Islands
    (GMT+11:00) Solomon Is., New Caledonia
    (GMT+12:00) Fiji, Kamchatka, Marshall Is.

  16. #19 by Cyril Mazur at June 18th, 2012

    On my system, PHP 5.3.6 doesn’t recognise these timezone identifiers as correct:

    Etc/GMT+10 (I replaced by Pacific/Honolulu)
    America/Ensenada (I replaced by America/Tijuana)
    Etc/GMT+8 (I replaced by Pacific/Pitcairn)
    Chile/EasterIsland (I replaced by Pacific/Easter)
    Europe/Belfast (Belfast belongs to the UK and is ruled by the same timezone as London, so I deleted it)
    Asia/Katmandu (mispelt, replaced by Asia/Kathmandu)
    Etc/GMT-11 (replaced by Pacific/Noumea)
    Etc/GMT-12 (replaced by Pacific/Fiji)

    Cool list otherwise, I will use it on my website (with my personal replacements)

  17. #20 by MAHESWARAN at August 22nd, 2012

    THANKS FOR THIS VALUABLE INFO

(will not be published)