UNPKG

2.51 kBJavaScriptView Raw
1
2!function(exports) {
3 exports.guessZone = guessZone
4 guessZone.zones = {
5 "-480d": "America/Los_Angeles",
6 "-420": "America/Phoenix",
7 "-420d": "America/Denver",
8 "-360": "America/Guatemala",
9 "-360d": "America/Chicago",
10 "-300": "America/Bogota",
11 "-300d": "America/New_York",
12 "-270": "America/Caracas",
13 "-240d": "America/Halifax",
14 "-240": "America/Santo_Domingo",
15 "-240s": "America/Asuncion",
16 "-210d": "America/St_Johns",
17 "-180d": "America/Godthab",
18 "-180": "America/Argentina/Buenos_Aires",
19 "-180s": "America/Montevideo",
20 "-120": "America/Noronha",
21 "-120d": "America/Noronha",
22 "0": "UTC",
23 "0d": "Europe/London",
24 "60d": "Europe/Berlin",
25 "60": "Africa/Lagos",
26 "60S": "Africa/Windhoek",
27 "120d": "Asia/Beirut",
28 "120": "Africa/Johannesburg",
29 "180": "Asia/Baghdad",
30 "180d": "Europe/Moscow",
31 "210d": "Asia/Tehran",
32 "240": "Asia/Dubai",
33 "240d": "Asia/Baku",
34 "270": "Asia/Kabul",
35 "300d": "Asia/Yekaterinburg",
36 "300": "Asia/Karachi",
37 "330": "Asia/Kolkata",
38 "345": "Asia/Kathmandu",
39 "360": "Asia/Dhaka",
40 "360d": "Asia/Omsk",
41 "390": "Asia/Rangoon",
42 "420d": "Asia/Krasnoyarsk",
43 "420": "Asia/Jakarta",
44 "480": "Asia/Shanghai",
45 "480d": "Asia/Irkutsk",
46 "525": "Australia/Eucla",
47 "525s": "Australia/Eucla",
48 "540d": "Asia/Yakutsk",
49 "540": "Asia/Tokyo",
50 "570": "Australia/Darwin",
51 "570s": "Australia/Adelaide",
52 "600": "Australia/Brisbane",
53 "600d": "Asia/Vladivostok",
54 "600s": "Australia/Sydney",
55 "630s": "Australia/Lord_Howe",
56 "660d": "Asia/Kamchatka",
57 "660": "Pacific/Noumea",
58 "690": "Pacific/Norfolk",
59 "720s": "Pacific/Auckland",
60 "720": "Pacific/Majuro",
61 "765s": "Pacific/Chatham",
62 "780": "Pacific/Tongatapu",
63 "780s": "Pacific/Apia",
64 "840": "Pacific/Kiritimati"
65 }
66
67 function guessZone(arr, map) {
68 var zone
69
70 try {
71 zone = Intl.DateTimeFormat().resolvedOptions().timeZone
72 // TODO:2018-03-26:lauri:Check that result is supported zone
73 } catch (e) {
74 var diff
75 , zones = Object.assign(guessZone.zones, map)
76 , date = new Date(2015, 0, 1)
77 , offset = -date.getTimezoneOffset()
78 , i = 0
79 , len = arr && arr.length
80
81 date.setMonth(5)
82 if (diff = -date.getTimezoneOffset() - offset) {
83 offset += diff > 0 ? "d" : "s"
84 }
85
86 for (; !zone && i < len; ) if (diff = arr[i++]) {
87 zone = zones[diff + offset] || zones[diff.split("-")[0] + offset]
88 }
89 }
90 return zone || zones[offset]
91 }
92}(this.Date || this)
93