litejs
Version:
Single-page application framework
94 lines (87 loc) • 2.51 kB
JavaScript
!function(exports) {
exports.guessZone = guessZone
guessZone.zones = {
"-480d": "America/Los_Angeles",
"-420": "America/Phoenix",
"-420d": "America/Denver",
"-360": "America/Guatemala",
"-360d": "America/Chicago",
"-300": "America/Bogota",
"-300d": "America/New_York",
"-270": "America/Caracas",
"-240d": "America/Halifax",
"-240": "America/Santo_Domingo",
"-240s": "America/Asuncion",
"-210d": "America/St_Johns",
"-180d": "America/Godthab",
"-180": "America/Argentina/Buenos_Aires",
"-180s": "America/Montevideo",
"-120": "America/Noronha",
"-120d": "America/Noronha",
"0": "UTC",
"0d": "Europe/London",
"60d": "Europe/Berlin",
"60": "Africa/Lagos",
"60S": "Africa/Windhoek",
"120d": "Asia/Beirut",
"120": "Africa/Johannesburg",
"180": "Asia/Baghdad",
"180d": "Europe/Moscow",
"210d": "Asia/Tehran",
"240": "Asia/Dubai",
"240d": "Asia/Baku",
"270": "Asia/Kabul",
"300d": "Asia/Yekaterinburg",
"300": "Asia/Karachi",
"330": "Asia/Kolkata",
"345": "Asia/Kathmandu",
"360": "Asia/Dhaka",
"360d": "Asia/Omsk",
"390": "Asia/Rangoon",
"420d": "Asia/Krasnoyarsk",
"420": "Asia/Jakarta",
"480": "Asia/Shanghai",
"480d": "Asia/Irkutsk",
"525": "Australia/Eucla",
"525s": "Australia/Eucla",
"540d": "Asia/Yakutsk",
"540": "Asia/Tokyo",
"570": "Australia/Darwin",
"570s": "Australia/Adelaide",
"600": "Australia/Brisbane",
"600d": "Asia/Vladivostok",
"600s": "Australia/Sydney",
"630s": "Australia/Lord_Howe",
"660d": "Asia/Kamchatka",
"660": "Pacific/Noumea",
"690": "Pacific/Norfolk",
"720s": "Pacific/Auckland",
"720": "Pacific/Majuro",
"765s": "Pacific/Chatham",
"780": "Pacific/Tongatapu",
"780s": "Pacific/Apia",
"840": "Pacific/Kiritimati"
}
function guessZone(arr, map) {
var zone
try {
zone = Intl.DateTimeFormat().resolvedOptions().timeZone
// TODO:2018-03-26:lauri:Check that result is supported zone
} catch (e) {
var diff
, zones = Object.assign(guessZone.zones, map)
, date = new Date(2015, 0, 1)
, offset = -date.getTimezoneOffset()
, i = 0
, len = arr && arr.length
date.setMonth(5)
if (diff = -date.getTimezoneOffset() - offset) {
offset += diff > 0 ? "d" : "s"
}
for (; !zone && i < len; ) if (diff = arr[i++]) {
zone = zones[diff + offset] || zones[diff.split("-")[0] + offset]
}
}
return zone || zones[offset]
}
}(this.Date || this)