Created
September 13, 2013 11:13
-
-
Save Yaffle/6549379 to your computer and use it in GitHub Desktop.
timeZone.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script> | |
var timeZoneIds = [ | |
"Africa/Abidjan", | |
"Africa/Accra", | |
"Africa/Addis_Ababa", | |
"Africa/Algiers", | |
"Africa/Asmera", | |
"Africa/Bamako", | |
"Africa/Bangui", | |
"Africa/Banjul", | |
"Africa/Bissau", | |
"Africa/Blantyre", | |
"Africa/Brazzaville", | |
"Africa/Bujumbura", | |
"Africa/Cairo", | |
"Africa/Casablanca", | |
"Africa/Ceuta", | |
"Africa/Conakry", | |
"Africa/Dakar", | |
"Africa/Djibouti", | |
"Africa/Douala", | |
"Africa/El_Aaiun", | |
"Africa/Freetown", | |
"Africa/Gaborone", | |
"Africa/Harare", | |
"Africa/Johannesburg", | |
"Africa/Juba", | |
"Africa/Kampala", | |
"Africa/Khartoum", | |
"Africa/Kigali", | |
"Africa/Kinshasa", | |
"Africa/Lagos", | |
"Africa/Libreville", | |
"Africa/Lome", | |
"Africa/Luanda", | |
"Africa/Lubumbashi", | |
"Africa/Lusaka", | |
"Africa/Malabo", | |
"Africa/Maputo", | |
"Africa/Maseru", | |
"Africa/Mbabane", | |
"Africa/Mogadishu", | |
"Africa/Monrovia", | |
"Africa/Nairobi", | |
"Africa/Ndjamena", | |
"Africa/Niamey", | |
"Africa/Nouakchott", | |
"Africa/Ouagadougou", | |
"Africa/Sao_Tome", | |
"Africa/Tripoli", | |
"Africa/Tunis", | |
"Africa/Windhoek", | |
"America/Adak", | |
"America/Anchorage", | |
"America/Anguilla", | |
"America/Antigua", | |
"America/Araguaina", | |
"America/Aruba", | |
"America/Asuncion", | |
"America/Bahia", | |
"America/Bahia_Banderas", | |
"America/Barbados", | |
"America/Belem", | |
"America/Belize", | |
"America/Boa_Vista", | |
"America/Bogota", | |
"America/Boise", | |
"America/Buenos_Aires", | |
"America/Cambridge_Bay", | |
"America/Campo_Grande", | |
"America/Cancun", | |
"America/Caracas", | |
"America/Catamarca", | |
"America/Cayenne", | |
"America/Cayman", | |
"America/Chicago", | |
"America/Chihuahua", | |
"America/Coral_Harbour", | |
"America/Cordoba", | |
"America/Costa_Rica", | |
"America/Cuiaba", | |
"America/Curacao", | |
"America/Danmarkshavn", | |
"America/Dawson", | |
"America/Dawson_Creek", | |
"America/Denver", | |
"America/Detroit", | |
"America/Dominica", | |
"America/Edmonton", | |
"America/Eirunepe", | |
"America/El_Salvador", | |
"America/Fortaleza", | |
"America/Glace_Bay", | |
"America/Godthab", | |
"America/Goose_Bay", | |
"America/Grand_Turk", | |
"America/Grenada", | |
"America/Guadeloupe", | |
"America/Guatemala", | |
"America/Guayaquil", | |
"America/Guyana", | |
"America/Halifax", | |
"America/Havana", | |
"America/Hermosillo", | |
"America/Indianapolis", | |
"America/Inuvik", | |
"America/Iqaluit", | |
"America/Jamaica", | |
"America/Jujuy", | |
"America/Juneau", | |
"America/La_Paz", | |
"America/Lima", | |
"America/Los_Angeles", | |
"America/Louisville", | |
"America/Maceio", | |
"America/Managua", | |
"America/Manaus", | |
"America/Marigot", | |
"America/Martinique", | |
"America/Matamoros", | |
"America/Mazatlan", | |
"America/Mendoza", | |
"America/Menominee", | |
"America/Merida", | |
"America/Metlakatla", | |
"America/Mexico_City", | |
"America/Miquelon", | |
"America/Moncton", | |
"America/Monterrey", | |
"America/Montevideo", | |
"America/Montreal", | |
"America/Montserrat", | |
"America/Nassau", | |
"America/New_York", | |
"America/Nipigon", | |
"America/Nome", | |
"America/Noronha", | |
"America/Ojinaga", | |
"America/Panama", | |
"America/Pangnirtung", | |
"America/Paramaribo", | |
"America/Phoenix", | |
"America/Porto_Velho", | |
"America/Puerto_Rico", | |
"America/Rainy_River", | |
"America/Rankin_Inlet", | |
"America/Recife", | |
"America/Regina", | |
"America/Resolute", | |
"America/Rio_Branco", | |
"America/Santa_Isabel", | |
"America/Santarem", | |
"America/Santiago", | |
"America/Santo_Domingo", | |
"America/Sao_Paulo", | |
"America/Scoresbysund", | |
"America/Shiprock", | |
"America/Sitka", | |
"America/St_Barthelemy", | |
"America/St_Johns", | |
"America/St_Kitts", | |
"America/St_Lucia", | |
"America/St_Thomas", | |
"America/St_Vincent", | |
"America/Swift_Current", | |
"America/Tegucigalpa", | |
"America/Thule", | |
"America/Thunder_Bay", | |
"America/Tijuana", | |
"America/Toronto", | |
"America/Tortola", | |
"America/Vancouver", | |
"America/Whitehorse", | |
"America/Winnipeg", | |
"America/Yakutat", | |
"America/Yellowknife", | |
"Antarctica/Casey", | |
"Antarctica/Davis", | |
"Antarctica/Macquarie", | |
"Antarctica/Mawson", | |
"Antarctica/Palmer", | |
"Antarctica/Rothera", | |
"Antarctica/South_Pole", | |
"Antarctica/Syowa", | |
"Antarctica/Vostok", | |
"Arctic/Longyearbyen", | |
"Asia/Aden", | |
"Asia/Almaty", | |
"Asia/Amman", | |
"Asia/Anadyr", | |
"Asia/Aqtau", | |
"Asia/Aqtobe", | |
"Asia/Ashgabat", | |
"Asia/Baghdad", | |
"Asia/Bahrain", | |
"Asia/Baku", | |
"Asia/Bangkok", | |
"Asia/Beirut", | |
"Asia/Bishkek", | |
"Asia/Brunei", | |
"Asia/Calcutta", | |
"Asia/Choibalsan", | |
"Asia/Chongqing", | |
"Asia/Colombo", | |
"Asia/Damascus", | |
"Asia/Dhaka", | |
"Asia/Dili", | |
"Asia/Dubai", | |
"Asia/Dushanbe", | |
"Asia/Gaza", | |
"Asia/Harbin", | |
"Asia/Hebron", | |
"Asia/Hong_Kong", | |
"Asia/Hovd", | |
"Asia/Irkutsk", | |
"Asia/Jakarta", | |
"Asia/Jayapura", | |
"Asia/Jerusalem", | |
"Asia/Kabul", | |
"Asia/Kamchatka", | |
"Asia/Karachi", | |
"Asia/Kashgar", | |
"Asia/Katmandu", | |
"Asia/Krasnoyarsk", | |
"Asia/Kuala_Lumpur", | |
"Asia/Kuching", | |
"Asia/Kuwait", | |
"Asia/Macau", | |
"Asia/Magadan", | |
"Asia/Makassar", | |
"Asia/Manila", | |
"Asia/Muscat", | |
"Asia/Nicosia", | |
"Asia/Novokuznetsk", | |
"Asia/Novosibirsk", | |
"Asia/Omsk", | |
"Asia/Oral", | |
"Asia/Phnom_Penh", | |
"Asia/Pontianak", | |
"Asia/Pyongyang", | |
"Asia/Qatar", | |
"Asia/Qyzylorda", | |
"Asia/Rangoon", | |
"Asia/Riyadh", | |
"Asia/Saigon", | |
"Asia/Sakhalin", | |
"Asia/Samarkand", | |
"Asia/Seoul", | |
"Asia/Shanghai", | |
"Asia/Singapore", | |
"Asia/Taipei", | |
"Asia/Tashkent", | |
"Asia/Tbilisi", | |
"Asia/Tehran", | |
"Asia/Thimphu", | |
"Asia/Tokyo", | |
"Asia/Ulaanbaatar", | |
"Asia/Urumqi", | |
"Asia/Vientiane", | |
"Asia/Vladivostok", | |
"Asia/Yakutsk", | |
"Asia/Yekaterinburg", | |
"Asia/Yerevan", | |
"Atlantic/Azores", | |
"Atlantic/Bermuda", | |
"Atlantic/Canary", | |
"Atlantic/Cape_Verde", | |
"Atlantic/Faeroe", | |
"Atlantic/Madeira", | |
"Atlantic/Reykjavik", | |
"Atlantic/South_Georgia", | |
"Atlantic/St_Helena", | |
"Atlantic/Stanley", | |
"Australia/Adelaide", | |
"Australia/Brisbane", | |
"Australia/Broken_Hill", | |
"Australia/Currie", | |
"Australia/Darwin", | |
"Australia/Eucla", | |
"Australia/Hobart", | |
"Australia/Lindeman", | |
"Australia/Lord_Howe", | |
"Australia/Melbourne", | |
"Australia/Perth", | |
"Australia/Sydney", | |
"Etc/GMT", | |
"Etc/UTC", | |
"Europe/Amsterdam", | |
"Europe/Andorra", | |
"Europe/Athens", | |
"Europe/Belgrade", | |
"Europe/Berlin", | |
"Europe/Bratislava", | |
"Europe/Brussels", | |
"Europe/Bucharest", | |
"Europe/Budapest", | |
"Europe/Chisinau", | |
"Europe/Copenhagen", | |
"Europe/Dublin", | |
"Europe/Gibraltar", | |
"Europe/Guernsey", | |
"Europe/Helsinki", | |
"Europe/Istanbul", | |
"Europe/Jersey", | |
"Europe/Kaliningrad", | |
"Europe/Kiev", | |
"Europe/Lisbon", | |
"Europe/Ljubljana", | |
"Europe/London", | |
"Europe/Luxembourg", | |
"Europe/Madrid", | |
"Europe/Malta", | |
"Europe/Mariehamn", | |
"Europe/Minsk", | |
"Europe/Monaco", | |
"Europe/Moscow", | |
"Europe/Oslo", | |
"Europe/Paris", | |
"Europe/Podgorica", | |
"Europe/Prague", | |
"Europe/Riga", | |
"Europe/Rome", | |
"Europe/Samara", | |
"Europe/San_Marino", | |
"Europe/Sarajevo", | |
"Europe/Simferopol", | |
"Europe/Skopje", | |
"Europe/Sofia", | |
"Europe/Stockholm", | |
"Europe/Tallinn", | |
"Europe/Tirane", | |
"Europe/Uzhgorod", | |
"Europe/Vaduz", | |
"Europe/Vatican", | |
"Europe/Vienna", | |
"Europe/Vilnius", | |
"Europe/Volgograd", | |
"Europe/Warsaw", | |
"Europe/Zagreb", | |
"Europe/Zaporozhye", | |
"Europe/Zurich", | |
"GMT", | |
"Indian/Antananarivo", | |
"Indian/Chagos", | |
"Indian/Christmas", | |
"Indian/Cocos", | |
"Indian/Comoro", | |
"Indian/Kerguelen", | |
"Indian/Mahe", | |
"Indian/Maldives", | |
"Indian/Mauritius", | |
"Indian/Mayotte", | |
"Indian/Reunion", | |
"Pacific/Apia", | |
"Pacific/Auckland", | |
"Pacific/Chatham", | |
"Pacific/Easter", | |
"Pacific/Efate", | |
"Pacific/Enderbury", | |
"Pacific/Fakaofo", | |
"Pacific/Fiji", | |
"Pacific/Funafuti", | |
"Pacific/Galapagos", | |
"Pacific/Gambier", | |
"Pacific/Guadalcanal", | |
"Pacific/Guam", | |
"Pacific/Honolulu", | |
"Pacific/Johnston", | |
"Pacific/Kiritimati", | |
"Pacific/Kosrae", | |
"Pacific/Kwajalein", | |
"Pacific/Majuro", | |
"Pacific/Marquesas", | |
"Pacific/Midway", | |
"Pacific/Nauru", | |
"Pacific/Niue", | |
"Pacific/Norfolk", | |
"Pacific/Noumea", | |
"Pacific/Pago_Pago", | |
"Pacific/Palau", | |
"Pacific/Pitcairn", | |
"Pacific/Ponape", | |
"Pacific/Port_Moresby", | |
"Pacific/Rarotonga", | |
"Pacific/Saipan", | |
"Pacific/Tahiti", | |
"Pacific/Tarawa", | |
"Pacific/Tongatapu", | |
"Pacific/Truk", | |
"Pacific/Wake", | |
"Pacific/Wallis", | |
"UTC" | |
]; | |
var timeZones = { | |
"0": "UTC", | |
"3600": "Africa/Tunis", | |
"7200": "Asia/Hebron", | |
"10800": "Indian/Mayotte", | |
"14400": "Indian/Reunion", | |
"16200": "Asia/Kabul", | |
"18000": "Indian/Maldives", | |
"19800": "Asia/Colombo", | |
"20700": "Asia/Katmandu", | |
"21600": "Indian/Chagos", | |
"23400": "Indian/Cocos", | |
"25200": "Indian/Christmas", | |
"28800": "Australia/Perth", | |
"31500": "Australia/Eucla", | |
"32400": "Pacific/Palau", | |
"34200": "Australia/Darwin", | |
"36000": "Pacific/Truk", | |
"39600": "Pacific/Ponape", | |
"41400": "Pacific/Norfolk", | |
"43200": "Pacific/Wallis", | |
"46800": "Pacific/Tongatapu", | |
"50400": "Pacific/Kiritimati", | |
"7200,1351386000000,3600": "Europe/Zurich", | |
"3600,1346547600000,7200": "Africa/Windhoek", | |
"-32400,1352026800000,-36000": "America/Adak", | |
"-28800,1352023200000,-32400": "America/Yakutat", | |
"-14400": "America/Tortola", | |
"-10800": "Antarctica/Rothera", | |
"-14400,1349049600000,-10800": "America/Asuncion", | |
"-10800,1350788400000,-7200": "America/Sao_Paulo", | |
"-18000,1351407600000,-21600": "America/Monterrey", | |
"-21600": "Pacific/Galapagos", | |
"-18000": "America/Panama", | |
"-21600,1352016000000,-25200": "America/Yellowknife", | |
"-14400,1350792000000,-10800": "America/Cuiaba", | |
"-16200": "America/Caracas", | |
"-18000,1352012400000,-21600": "America/Winnipeg", | |
"-21600,1351411200000,-25200": "America/Mazatlan", | |
"-25200,1352019600000,-28800": "America/Whitehorse", | |
"-25200": "America/Phoenix", | |
"-14400,1352008800000,-18000": "America/Toronto", | |
"-10800,1352005200000,-14400": "Atlantic/Bermuda", | |
"-7200,1351386000000,-10800": "America/Godthab", | |
"-14400,1351400400000,-18000": "America/Havana", | |
"-28800": "Pacific/Pitcairn", | |
"-7200,1352001600000,-10800": "America/Miquelon", | |
"-10800,1349049600000,-7200": "America/Montevideo", | |
"-7200": "Atlantic/South_Georgia", | |
"-25200,1351414800000,-28800": "America/Santa_Isabel", | |
"-14400,1350187200000,-10800": "Antarctica/Palmer", | |
"0,1351386000000,-3600": "Atlantic/Azores", | |
"-9000,1352003400000,-12600": "America/St_Johns", | |
"43200,1348927200000,46800": "Pacific/Auckland", | |
"10800,1351202400000,7200": "Asia/Amman", | |
"18000,1351382400000,14400": "Asia/Baku", | |
"10800,1351371600000,7200": "Asia/Beirut", | |
"10800,1351198800000,7200": "Asia/Damascus", | |
"10800,1348354800000,7200": "Asia/Jerusalem", | |
"10800,1351386000000,7200": "Europe/Zaporozhye", | |
"16200,1348169400000,12600": "Asia/Tehran", | |
"18000,1351375200000,14400": "Asia/Yerevan", | |
"3600,1351386000000,0": "Europe/London", | |
"-3600": "Atlantic/Cape_Verde", | |
"-14400,1346565600000,-10800": "Atlantic/Stanley", | |
"34200,1349541000000,37800": "Australia/Broken_Hill", | |
"36000,1349539200000,39600": "Australia/Sydney", | |
"37800,1349537400000,39600": "Australia/Lord_Howe", | |
"45900,1348927200000,49500": "Pacific/Chatham", | |
"-21600,1350187200000,-18000": "Pacific/Easter", | |
"-36000": "Pacific/Tahiti", | |
"-32400": "Pacific/Gambier", | |
"-34200": "Pacific/Marquesas", | |
"-39600": "Pacific/Pago_Pago" | |
}; | |
var TimeZoneUtils = { | |
formatsCache: {}, | |
getTimeZoneOffset: function (timeZoneId, timeStamp) { | |
if (timeZoneId === null) { | |
var date = new Date(timeStamp); | |
return date.getTimezoneOffset() * -60; | |
} else { | |
var formatsCache = TimeZoneUtils.formatsCache; | |
var x = formatsCache[timeZoneId]; | |
if (x === undefined) { | |
var options = {hour12: false, day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit", timeZone: timeZoneId}; | |
x = new Intl.DateTimeFormat("en", options); | |
formatsCache[timeZoneId] = x; | |
} | |
var date = new Date(timeStamp); | |
var s = x.format(date); | |
var m = s.match(/^(\d\d)\s*(\d\d)\:(\d\d):(\d\d)$/); | |
if (!m) { | |
throw new Error(s);//! | |
} | |
var gmtTime = ((date.getUTCDate() * 24 + date.getUTCHours()) * 60 + date.getUTCMinutes()) * 60 + date.getUTCSeconds(); | |
var localTime = ((Number(m[1]) * 24 + Number(m[2])) * 60 + Number(m[3])) * 60 + Number(m[4]); | |
var offset = localTime - gmtTime; | |
return offset; | |
} | |
}, | |
getTimeZoneTransitions: function (timeZoneId) { | |
var to = 1356998400000; | |
var from = to - 0.5 * 366 * 86400 * 1000; | |
var step = 86400000 * 28; | |
var lastOffset = -1; | |
var transitions = ""; | |
while ((from += step) < to) { | |
var offset = TimeZoneUtils.getTimeZoneOffset(timeZoneId, from); | |
if (lastOffset === -1) { | |
lastOffset = offset; | |
transitions += String(offset); | |
} | |
if (offset !== lastOffset) { | |
// binary search | |
var a = from - step; | |
var b = from; | |
while (b - a > 1) { | |
var m = a + Math.floor((b - a) / 2); | |
if (TimeZoneUtils.getTimeZoneOffset(timeZoneId, m) === lastOffset) { | |
a = m; | |
} else { | |
b = m; | |
} | |
} | |
transitions += "," + String(b) + "," + String(offset); | |
lastOffset = offset; | |
} | |
} | |
return transitions; | |
}, | |
offsetToString: function (offset) { | |
var a = Math.abs(offset); | |
var hours = Math.floor(a / 3600); | |
var minutes = Math.floor((a % 60) / 60); | |
return "GMT" + (offset < 0 ? "-" : "+") + (hours < 10 ? "0" : "") + hours + (minutes < 10 ? "0" : "") + minutes; | |
}, | |
getTimeZone: function () { | |
return timeZones[TimeZoneUtils.getTimeZoneTransitions(null)] || TimeZoneUtils.offsetToString(TimeZoneUtils.getTimeZoneOffset(null, new Date().getTime())); | |
}, | |
getTimeZonesMap: function () { | |
var map = {}; | |
var i = -1; | |
while (++i < timeZoneIds.length) { | |
var id = timeZoneIds[i]; | |
try { | |
var s = TimeZoneUtils.getTimeZoneTransitions(id); | |
map[s] = id; | |
} catch (e) { | |
if (e instanceof RangeError) { | |
// Unsupported time zone | |
console.log(String(e.message)); | |
} else { | |
throw e; | |
} | |
} | |
} | |
return map; | |
} | |
}; | |
console.log(TimeZoneUtils.getTimeZone()); | |
</script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment