Retrieve local time and date of an arbitrary day in an arbitrary timezone, considering daylight saving time

10

I want to show the day, hour, minute, etc. in an arbitrary timezone, on an arbitrary day. How to talk about timezone conversion is always difficult and confusing, and how to talk about timezone conversions in JavaScript is even more difficult and confusing, I'm going to try half way to formalize the question:

I am looking for a function f(t, s) that:

  • Given the timestamp 1357041600 (that 2013/1/1 12:00:00 UTC) and the string "America/São Paulo" , please match the equality below:

    f(1357041600, "America/São Paulo") == "2013/01/01 10:00:00"
    
  • Given the timestamp 1372680000 (2013/07/01 12:00:00 UTC), please match the below:

    f(1357041600, "America/São Paulo") == "2013/07/01 09:00:00"
    
  • Always behave in this way regardless of the timezone of the machine where the browser runs (even if it is, say "Europe/London" or "America/Los Angeles" ).

  • If you always behave this way regardless of the time on the machine where the browser runs (even if it is 2014/02/05 19:32, or 2002/08/04 07:12)

    li>
  • And finally, do not communicate with code running on some server (because I'm almost calling for it myself :))

Is this possible?

    
asked by anonymous 06.02.2014 / 00:13

3 answers

5

This function does not exist in javascript, has to be done by hand, or by using a library.

So, here's one I made now (between last night and today):

First, declare all time zones in a JSON:

var olson = '{"result":[{"TimeZoneId":"Africa/Abidjan","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Accra","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Addis Ababa","DST":"3","GMT":"3"},{"TimeZoneId":"Africa/Algiers","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/Asmara","DST":"3","GMT":"3"},{"TimeZoneId":"Africa/Bamako","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Bangui","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/Banjul","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Bissau","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Blantyre","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Brazzaville","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/Bujumbura","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Cairo","DST":"3","GMT":"2"},{"TimeZoneId":"Africa/Casablanca","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Ceuta","DST":"2","GMT":"1"},{"TimeZoneId":"Africa/Conakry","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Dakar","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Dar es Salaam","DST":"3","GMT":"3"},{"TimeZoneId":"Africa/Djibouti","DST":"3","GMT":"3"},{"TimeZoneId":"Africa/Douala","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/El Aaiun","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Freetown","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Gaborone","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Harare","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Johannesburg","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Kampala","DST":"3","GMT":"3"},{"TimeZoneId":"Africa/Khartoum","DST":"3","GMT":"3"},{"TimeZoneId":"Africa/Kigali","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Kinshasa","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/Lagos","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/Libreville","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/Lome","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Luanda","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/Lubumbashi","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Lusaka","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Malabo","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/Maputo","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Maseru","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Mbabane","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Mogadishu","DST":"3","GMT":"3"},{"TimeZoneId":"Africa/Monrovia","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Nairobi","DST":"3","GMT":"3"},{"TimeZoneId":"Africa/Ndjamena","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/Niamey","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/Nouakchott","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Ouagadougou","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Porto/Novo","DST":"1","GMT":"1"},{"TimeZoneId":"Africa/Sao Tome","DST":"0","GMT":"0"},{"TimeZoneId":"Africa/Tripoli","DST":"2","GMT":"2"},{"TimeZoneId":"Africa/Tunis","DST":"2","GMT":"1"},{"TimeZoneId":"Africa/Windhoek","DST":"1","GMT":"2"},{"TimeZoneId":"America/Adak","DST":"-9","GMT":"-10"},{"TimeZoneId":"America/Anchorage","DST":"-8","GMT":"-9"},{"TimeZoneId":"America/Anguilla","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Antigua","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Araguaina","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Argentina/Buenos Aires","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Argentina/Catamarca","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Argentina/Cordoba","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Argentina/Jujuy","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Argentina/La Rioja","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Argentina/Mendoza","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Argentina/Rio Gallegos","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Argentina/Salta","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Argentina/San Juan","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Argentina/San Luis","DST":"-4","GMT":"-3"},{"TimeZoneId":"America/Argentina/Tucuman","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Argentina/Ushuaia","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Aruba","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Asuncion","DST":"-4","GMT":"-3"},{"TimeZoneId":"America/Atikokan","DST":"-5","GMT":"-5"},{"TimeZoneId":"America/Bahia","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Barbados","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Belem","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Belize","DST":"-6","GMT":"-6"},{"TimeZoneId":"America/Blanc/Sablon","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Boa Vista","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Bogota","DST":"-5","GMT":"-5"},{"TimeZoneId":"America/Boise","DST":"-6","GMT":"-7"},{"TimeZoneId":"America/Cambridge Bay","DST":"-6","GMT":"-7"},{"TimeZoneId":"America/Campo Grande","DST":"-4","GMT":"-3"},{"TimeZoneId":"America/Cancun","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Caracas","DST":"-4.5","GMT":"-4.5"},{"TimeZoneId":"America/Cayenne","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Cayman","DST":"-5","GMT":"-5"},{"TimeZoneId":"America/Chicago","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Chihuahua","DST":"-6","GMT":"-7"},{"TimeZoneId":"America/Costa Rica","DST":"-6","GMT":"-6"},{"TimeZoneId":"America/Cuiaba","DST":"-4","GMT":"-3"},{"TimeZoneId":"America/Curacao","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Danmarkshavn","DST":"0","GMT":"0"},{"TimeZoneId":"America/Dawson","DST":"-7","GMT":"-8"},{"TimeZoneId":"America/Dawson Creek","DST":"-7","GMT":"-7"},{"TimeZoneId":"America/Denver","DST":"-6","GMT":"-7"},{"TimeZoneId":"America/Detroit","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Dominica","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Edmonton","DST":"-6","GMT":"-7"},{"TimeZoneId":"America/Eirunepe","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/El Salvador","DST":"-6","GMT":"-6"},{"TimeZoneId":"America/Fortaleza","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Glace Bay","DST":"-3","GMT":"-4"},{"TimeZoneId":"America/Godthab","DST":"-2","GMT":"-3"},{"TimeZoneId":"America/Goose Bay","DST":"-3","GMT":"-4"},{"TimeZoneId":"America/Grand Turk","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Grenada","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Guadeloupe","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Guatemala","DST":"-6","GMT":"-6"},{"TimeZoneId":"America/Guayaquil","DST":"-5","GMT":"-5"},{"TimeZoneId":"America/Guyana","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Halifax","DST":"-3","GMT":"-4"},{"TimeZoneId":"America/Havana","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Hermosillo","DST":"-7","GMT":"-7"},{"TimeZoneId":"America/Indiana/Indianapolis","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Indiana/Knox","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Indiana/Marengo","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Indiana/Petersburg","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Indiana/Tell City","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Indiana/Vevay","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Indiana/Vincennes","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Indiana/Winamac","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Inuvik","DST":"-6","GMT":"-7"},{"TimeZoneId":"America/Iqaluit","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Jamaica","DST":"-5","GMT":"-5"},{"TimeZoneId":"America/Juneau","DST":"-8","GMT":"-9"},{"TimeZoneId":"America/Kentucky/Louisville","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Kentucky/Monticello","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/La Paz","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Lima","DST":"-5","GMT":"-5"},{"TimeZoneId":"America/Los Angeles","DST":"-7","GMT":"-8"},{"TimeZoneId":"America/Maceio","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Managua","DST":"-6","GMT":"-6"},{"TimeZoneId":"America/Manaus","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Marigot","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Martinique","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Matamoros","DST":"0","GMT":"0"},{"TimeZoneId":"America/Mazatlan","DST":"-6","GMT":"-7"},{"TimeZoneId":"America/Menominee","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Merida","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Mexico City","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Miquelon","DST":"-2","GMT":"-3"},{"TimeZoneId":"America/Moncton","DST":"-3","GMT":"-4"},{"TimeZoneId":"America/Monterrey","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Montevideo","DST":"-3","GMT":"-2"},{"TimeZoneId":"America/Montreal","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Montserrat","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Nassau","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/New York","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Nipigon","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Nome","DST":"-8","GMT":"-9"},{"TimeZoneId":"America/Noronha","DST":"-2","GMT":"-2"},{"TimeZoneId":"America/North Dakota/Center","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/North Dakota/New Salem","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Ojinaga","DST":"0","GMT":"0"},{"TimeZoneId":"America/Panama","DST":"-5","GMT":"-5"},{"TimeZoneId":"America/Pangnirtung","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Paramaribo","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Phoenix","DST":"-7","GMT":"-7"},{"TimeZoneId":"America/Port/au/Prince","DST":"-5","GMT":"-5"},{"TimeZoneId":"America/Port of Spain","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Porto Velho","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Puerto Rico","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Rainy River","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Rankin Inlet","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Recife","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Regina","DST":"-6","GMT":"-6"},{"TimeZoneId":"America/Resolute","DST":"-5","GMT":"-5"},{"TimeZoneId":"America/Rio Branco","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Santa Isabel","DST":"0","GMT":"0"},{"TimeZoneId":"America/Santarem","DST":"-3","GMT":"-3"},{"TimeZoneId":"America/Santiago","DST":"-4","GMT":"-3"},{"TimeZoneId":"America/Santo Domingo","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Sao Paulo","DST":"-3","GMT":"-2"},{"TimeZoneId":"America/Scoresbysund","DST":"0","GMT":"-1"},{"TimeZoneId":"America/Shiprock","DST":"-6","GMT":"-7"},{"TimeZoneId":"America/St Barthelemy","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/St Johns","DST":"-2.5","GMT":"-3.5"},{"TimeZoneId":"America/St Kitts","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/St Lucia","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/St Thomas","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/St Vincent","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Swift Current","DST":"-6","GMT":"-6"},{"TimeZoneId":"America/Tegucigalpa","DST":"-6","GMT":"-6"},{"TimeZoneId":"America/Thule","DST":"-3","GMT":"-4"},{"TimeZoneId":"America/Thunder Bay","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Tijuana","DST":"-7","GMT":"-8"},{"TimeZoneId":"America/Toronto","DST":"-4","GMT":"-5"},{"TimeZoneId":"America/Tortola","DST":"-4","GMT":"-4"},{"TimeZoneId":"America/Vancouver","DST":"-7","GMT":"-8"},{"TimeZoneId":"America/Whitehorse","DST":"-7","GMT":"-8"},{"TimeZoneId":"America/Winnipeg","DST":"-5","GMT":"-6"},{"TimeZoneId":"America/Yakutat","DST":"-8","GMT":"-9"},{"TimeZoneId":"America/Yellowknife","DST":"-6","GMT":"-7"},{"TimeZoneId":"Antarctica/Casey","DST":"11","GMT":"11"},{"TimeZoneId":"Antarctica/Davis","DST":"5","GMT":"5"},{"TimeZoneId":"Antarctica/DumontDUrville","DST":"10","GMT":"10"},{"TimeZoneId":"Antarctica/Mawson","DST":"5","GMT":"5"},{"TimeZoneId":"Antarctica/McMurdo","DST":"12","GMT":"13"},{"TimeZoneId":"Antarctica/Palmer","DST":"-4","GMT":"-3"},{"TimeZoneId":"Antarctica/Rothera","DST":"-3","GMT":"-3"},{"TimeZoneId":"Antarctica/South Pole","DST":"12","GMT":"13"},{"TimeZoneId":"Antarctica/Syowa","DST":"3","GMT":"3"},{"TimeZoneId":"Antarctica/Vostok","DST":"6","GMT":"6"},{"TimeZoneId":"Arctic/Longyearbyen","DST":"2","GMT":"1"},{"TimeZoneId":"Asia/Aden","DST":"3","GMT":"3"},{"TimeZoneId":"Asia/Almaty","DST":"6","GMT":"6"},{"TimeZoneId":"Asia/Amman","DST":"3","GMT":"2"},{"TimeZoneId":"Asia/Anadyr","DST":"13","GMT":"12"},{"TimeZoneId":"Asia/Aqtau","DST":"5","GMT":"5"},{"TimeZoneId":"Asia/Aqtobe","DST":"5","GMT":"5"},{"TimeZoneId":"Asia/Ashgabat","DST":"5","GMT":"5"},{"TimeZoneId":"Asia/Baghdad","DST":"3","GMT":"3"},{"TimeZoneId":"Asia/Bahrain","DST":"3","GMT":"3"},{"TimeZoneId":"Asia/Baku","DST":"5","GMT":"4"},{"TimeZoneId":"Asia/Bangkok","DST":"7","GMT":"7"},{"TimeZoneId":"Asia/Beirut","DST":"3","GMT":"2"},{"TimeZoneId":"Asia/Bishkek","DST":"6","GMT":"6"},{"TimeZoneId":"Asia/Brunei","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Choibalsan","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Chongqing","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Colombo","DST":"5.5","GMT":"5.5"},{"TimeZoneId":"Asia/Damascus","DST":"3","GMT":"2"},{"TimeZoneId":"Asia/Dhaka","DST":"7","GMT":"6"},{"TimeZoneId":"Asia/Dili","DST":"9","GMT":"9"},{"TimeZoneId":"Asia/Dubai","DST":"4","GMT":"4"},{"TimeZoneId":"Asia/Dushanbe","DST":"5","GMT":"5"},{"TimeZoneId":"Asia/Gaza","DST":"3","GMT":"2"},{"TimeZoneId":"Asia/Harbin","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Ho Chi Minh","DST":"7","GMT":"7"},{"TimeZoneId":"Asia/Hong Kong","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Hovd","DST":"7","GMT":"7"},{"TimeZoneId":"Asia/Irkutsk","DST":"9","GMT":"8"},{"TimeZoneId":"Asia/Jakarta","DST":"7","GMT":"7"},{"TimeZoneId":"Asia/Jayapura","DST":"9","GMT":"9"},{"TimeZoneId":"Asia/Jerusalem","DST":"3","GMT":"2"},{"TimeZoneId":"Asia/Kabul","DST":"4.5","GMT":"4.5"},{"TimeZoneId":"Asia/Kamchatka","DST":"13","GMT":"12"},{"TimeZoneId":"Asia/Karachi","DST":"6","GMT":"5"},{"TimeZoneId":"Asia/Kashgar","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Kathmandu","DST":"5.75","GMT":"5.75"},{"TimeZoneId":"Asia/Kolkata","DST":"5.5","GMT":"5.5"},{"TimeZoneId":"Asia/Krasnoyarsk","DST":"8","GMT":"7"},{"TimeZoneId":"Asia/Kuala Lumpur","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Kuching","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Kuwait","DST":"3","GMT":"3"},{"TimeZoneId":"Asia/Macau","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Magadan","DST":"12","GMT":"11"},{"TimeZoneId":"Asia/Makassar","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Manila","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Muscat","DST":"4","GMT":"4"},{"TimeZoneId":"Asia/Nicosia","DST":"3","GMT":"2"},{"TimeZoneId":"Asia/Novokuznetsk","DST":"7","GMT":"7"},{"TimeZoneId":"Asia/Novosibirsk","DST":"7","GMT":"6"},{"TimeZoneId":"Asia/Omsk","DST":"7","GMT":"6"},{"TimeZoneId":"Asia/Oral","DST":"5","GMT":"5"},{"TimeZoneId":"Asia/Phnom Penh","DST":"7","GMT":"7"},{"TimeZoneId":"Asia/Pontianak","DST":"7","GMT":"7"},{"TimeZoneId":"Asia/Pyongyang","DST":"9","GMT":"9"},{"TimeZoneId":"Asia/Qatar","DST":"3","GMT":"3"},{"TimeZoneId":"Asia/Qyzylorda","DST":"6","GMT":"6"},{"TimeZoneId":"Asia/Rangoon","DST":"6.5","GMT":"6.5"},{"TimeZoneId":"Asia/Riyadh","DST":"3","GMT":"3"},{"TimeZoneId":"Asia/Sakhalin","DST":"11","GMT":"10"},{"TimeZoneId":"Asia/Samarkand","DST":"5","GMT":"5"},{"TimeZoneId":"Asia/Seoul","DST":"9","GMT":"9"},{"TimeZoneId":"Asia/Shanghai","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Singapore","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Taipei","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Tashkent","DST":"5","GMT":"5"},{"TimeZoneId":"Asia/Tbilisi","DST":"4","GMT":"4"},{"TimeZoneId":"Asia/Tehran","DST":"4.5","GMT":"3.5"},{"TimeZoneId":"Asia/Thimphu","DST":"6","GMT":"6"},{"TimeZoneId":"Asia/Tokyo","DST":"9","GMT":"9"},{"TimeZoneId":"Asia/Ulaanbaatar","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Urumqi","DST":"8","GMT":"8"},{"TimeZoneId":"Asia/Vientiane","DST":"7","GMT":"7"},{"TimeZoneId":"Asia/Vladivostok","DST":"11","GMT":"10"},{"TimeZoneId":"Asia/Yakutsk","DST":"10","GMT":"9"},{"TimeZoneId":"Asia/Yekaterinburg","DST":"6","GMT":"5"},{"TimeZoneId":"Asia/Yerevan","DST":"5","GMT":"4"},{"TimeZoneId":"Atlantic/Azores","DST":"0","GMT":"-1"},{"TimeZoneId":"Atlantic/Bermuda","DST":"-3","GMT":"-4"},{"TimeZoneId":"Atlantic/Canary","DST":"1","GMT":"0"},{"TimeZoneId":"Atlantic/Cape Verde","DST":"-1","GMT":"-1"},{"TimeZoneId":"Atlantic/Faroe","DST":"1","GMT":"0"},{"TimeZoneId":"Atlantic/Madeira","DST":"1","GMT":"0"},{"TimeZoneId":"Atlantic/Reykjavik","DST":"0","GMT":"0"},{"TimeZoneId":"Atlantic/South Georgia","DST":"-2","GMT":"-2"},{"TimeZoneId":"Atlantic/St Helena","DST":"0","GMT":"0"},{"TimeZoneId":"Atlantic/Stanley","DST":"-4","GMT":"-3"},{"TimeZoneId":"Australia/Adelaide","DST":"9.5","GMT":"10.5"},{"TimeZoneId":"Australia/Brisbane","DST":"10","GMT":"10"},{"TimeZoneId":"Australia/Broken Hill","DST":"9.5","GMT":"10.5"},{"TimeZoneId":"Australia/Currie","DST":"10","GMT":"11"},{"TimeZoneId":"Australia/Darwin","DST":"9.5","GMT":"9.5"},{"TimeZoneId":"Australia/Eucla","DST":"8.75","GMT":"8.75"},{"TimeZoneId":"Australia/Hobart","DST":"10","GMT":"11"},{"TimeZoneId":"Australia/Lindeman","DST":"10","GMT":"10"},{"TimeZoneId":"Australia/Lord Howe","DST":"10.5","GMT":"11"},{"TimeZoneId":"Australia/Melbourne","DST":"10","GMT":"11"},{"TimeZoneId":"Australia/Perth","DST":"8","GMT":"8"},{"TimeZoneId":"Australia/Sydney","DST":"10","GMT":"11"},{"TimeZoneId":"Europe/Amsterdam","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Andorra","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Athens","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Belgrade","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Berlin","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Bratislava","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Brussels","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Bucharest","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Budapest","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Chisinau","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Copenhagen","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Dublin","DST":"1","GMT":"0"},{"TimeZoneId":"Europe/Gibraltar","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Guernsey","DST":"1","GMT":"0"},{"TimeZoneId":"Europe/Helsinki","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Isle of Man","DST":"1","GMT":"0"},{"TimeZoneId":"Europe/Istanbul","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Jersey","DST":"1","GMT":"0"},{"TimeZoneId":"Europe/Kaliningrad","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Kiev","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Lisbon","DST":"1","GMT":"0"},{"TimeZoneId":"Europe/Ljubljana","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/London","DST":"1","GMT":"0"},{"TimeZoneId":"Europe/Luxembourg","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Madrid","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Malta","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Mariehamn","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Minsk","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Monaco","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Moscow","DST":"4","GMT":"3"},{"TimeZoneId":"Europe/Oslo","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Paris","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Podgorica","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Prague","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Riga","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Rome","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Samara","DST":"5","GMT":"4"},{"TimeZoneId":"Europe/San Marino","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Sarajevo","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Simferopol","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Skopje","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Sofia","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Stockholm","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Tallinn","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Tirane","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Uzhgorod","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Vaduz","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Vatican","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Vienna","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Vilnius","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Volgograd","DST":"4","GMT":"3"},{"TimeZoneId":"Europe/Warsaw","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Zagreb","DST":"2","GMT":"1"},{"TimeZoneId":"Europe/Zaporozhye","DST":"3","GMT":"2"},{"TimeZoneId":"Europe/Zurich","DST":"2","GMT":"1"},{"TimeZoneId":"Indian/Antananarivo","DST":"3","GMT":"3"},{"TimeZoneId":"Indian/Chagos","DST":"6","GMT":"6"},{"TimeZoneId":"Indian/Christmas","DST":"7","GMT":"7"},{"TimeZoneId":"Indian/Cocos","DST":"6.5","GMT":"6.5"},{"TimeZoneId":"Indian/Comoro","DST":"3","GMT":"3"},{"TimeZoneId":"Indian/Kerguelen","DST":"5","GMT":"5"},{"TimeZoneId":"Indian/Mahe","DST":"4","GMT":"4"},{"TimeZoneId":"Indian/Maldives","DST":"5","GMT":"5"},{"TimeZoneId":"Indian/Mauritius","DST":"4","GMT":"4"},{"TimeZoneId":"Indian/Mayotte","DST":"3","GMT":"3"},{"TimeZoneId":"Indian/Reunion","DST":"4","GMT":"4"},{"TimeZoneId":"Pacific/Apia","DST":"-11","GMT":"-10"},{"TimeZoneId":"Pacific/Auckland","DST":"12","GMT":"13"},{"TimeZoneId":"Pacific/Chatham","DST":"12.75","GMT":"13.75"},{"TimeZoneId":"Pacific/Easter","DST":"-6","GMT":"-5"},{"TimeZoneId":"Pacific/Efate","DST":"11","GMT":"11"},{"TimeZoneId":"Pacific/Enderbury","DST":"13","GMT":"13"},{"TimeZoneId":"Pacific/Fakaofo","DST":"-10","GMT":"-10"},{"TimeZoneId":"Pacific/Fiji","DST":"12","GMT":"13"},{"TimeZoneId":"Pacific/Funafuti","DST":"12","GMT":"12"},{"TimeZoneId":"Pacific/Galapagos","DST":"-6","GMT":"-6"},{"TimeZoneId":"Pacific/Gambier","DST":"-9","GMT":"-9"},{"TimeZoneId":"Pacific/Guadalcanal","DST":"11","GMT":"11"},{"TimeZoneId":"Pacific/Guam","DST":"10","GMT":"10"},{"TimeZoneId":"Pacific/Honolulu","DST":"-10","GMT":"-10"},{"TimeZoneId":"Pacific/Johnston","DST":"-10","GMT":"-10"},{"TimeZoneId":"Pacific/Kiritimati","DST":"14","GMT":"14"},{"TimeZoneId":"Pacific/Kosrae","DST":"11","GMT":"11"},{"TimeZoneId":"Pacific/Kwajalein","DST":"12","GMT":"12"},{"TimeZoneId":"Pacific/Majuro","DST":"12","GMT":"12"},{"TimeZoneId":"Pacific/Marquesas","DST":"-9.5","GMT":"-9.5"},{"TimeZoneId":"Pacific/Midway","DST":"-11","GMT":"-11"},{"TimeZoneId":"Pacific/Nauru","DST":"12","GMT":"12"},{"TimeZoneId":"Pacific/Niue","DST":"-11","GMT":"-11"},{"TimeZoneId":"Pacific/Norfolk","DST":"11.5","GMT":"11.5"},{"TimeZoneId":"Pacific/Noumea","DST":"11","GMT":"11"},{"TimeZoneId":"Pacific/Pago Pago","DST":"-11","GMT":"-11"},{"TimeZoneId":"Pacific/Palau","DST":"9","GMT":"9"},{"TimeZoneId":"Pacific/Pitcairn","DST":"-8","GMT":"-8"},{"TimeZoneId":"Pacific/Ponape","DST":"11","GMT":"11"},{"TimeZoneId":"Pacific/Port Moresby","DST":"10","GMT":"10"},{"TimeZoneId":"Pacific/Rarotonga","DST":"-10","GMT":"-10"},{"TimeZoneId":"Pacific/Saipan","DST":"10","GMT":"10"},{"TimeZoneId":"Pacific/Tahiti","DST":"-10","GMT":"-10"},{"TimeZoneId":"Pacific/Tarawa","DST":"12","GMT":"12"},{"TimeZoneId":"Pacific/Tongatapu","DST":"13","GMT":"13"},{"TimeZoneId":"Pacific/Truk","DST":"10","GMT":"10"},{"TimeZoneId":"Pacific/Wake","DST":"12","GMT":"12"},{"TimeZoneId":"Pacific/Wallis","DST":"12","GMT":"12"}]}';
olson = JSON.parse(olson);
var olsonKeys = Object.keys(olson);

Having a timezone and its time offset, you can use this function:

function gerarData(a, b) {
    var match = {};
    for (var i = 0; i < olson.result.length; i++) {
        if (olson.result[i].TimeZoneId == b) match = olson.result[i];
    }

    var clientOffset = new Date().getTimezoneOffset() / 60;
    var timeZoneDSTOffset = parseInt(match.GMT);
    var offsetCorrection = (timeZoneDSTOffset - 3) * 60 * 60 * 1000; // *1000 porque o javascript trabalha em milisegundos
    var date = new Date(a * 1000 + offsetCorrection); 

    // função para corrigir numero de digitos para ter sempre 2
    function digitos(n) {
        return n > 9 ? "" + n : "0" + n;
    }
    // formatar a data
    var formatedDate = date.getFullYear() + '/' + 
        digitos(date.getMonth() + 1) + '/' +  // +1 porque o getMonth() começa em zero
        digitos(date.getDate()) + ' ' + 
        digitos(date.getHours()) + ':' + 
        digitos(date.getMinutes()) + ':' + 
        digitos(date.getSeconds());

    return formatedDate;
}

Demo

So, on my demo:

gerarData(1357041600, "Europe/London");     // dá "2013/01/01 10:00:00"
gerarData(1372680000, "America/Sao Paulo"); // dá "2013/07/01 09:00:00"

Please note that my suggestion does not accept ã and other characters, but you can correct this with this question / answer.

This result is much simpler in PHP, you could create an ajax request and fetch this value, but if I understood correctly this is what you do not want.

    
06.02.2014 / 09:53
1

You would have to periodically download the historic timezones list at link , on your server, interpret this document for a (JSON?) and load this document at the time of executing its "f" function, so that it can look up timezone by name.

Java seems to have this information too, directly via API, so another output would load a Java applet that your Javascript code could then query. This is if you can force clients to use Java in the browser and the best solution (server side resolver) is not feasible.

Note that your "f" function does not need to communicate with the server call. Just once to load the table, and if the table is converted to JSON, it can be loaded as an extra JS font on the page.

    
06.02.2014 / 00:21
1

With native JavaScript, the only way is to use some solution similar to what is suggested in Sergio's response.

But if you can use a library, I suggest moment.js . To work with time zones, you also need moment timezone .

One advantage of using this library is that time zone information changes all the time and it is difficult to keep your code in tune with all rules (for example, in Brazil the daylight saving rule has recently changed ). In the documentation explains how to keep the data up to date.

With this library, the code is very easy:

function f(t, s) {
    return moment.tz(t * 1000, s).format('YYYY/MM/DD HH:mm:ss');
}

I had to multiply t per 1000 because the values you indicated are in seconds, but the API works in milliseconds. To use:

f(1357041600, "America/Sao_Paulo"); // 2013/01/01 10:00:00
f(1372680000, "America/Sao_Paulo"); // 2013/07/01 09:00:00

Note that the second parameter is America/Sao_Paulo : no accent and with _ instead of space. That's because the names of the timezones follow the IANA standard .

If you want, you can adapt the code to accept more names, but always mapping to a valid name. To know all available names, use the moment.tz.names() function, which returns an array with all names.

    
04.05.2018 / 20:48