browser-timezone-rails 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3ad69b29ede257ebb886892cff3b8faf3d0e452b
4
- data.tar.gz: c77e14a2cc1943d610e8580c52d8234d363fc16c
3
+ metadata.gz: ecd7391cbef26fb49eb9b2122d07b4e8cb9e82d9
4
+ data.tar.gz: cdf8ef151ab7b26e1499856fb653bb83fe6a8033
5
5
  SHA512:
6
- metadata.gz: 9a78eddf66a61f1663cdcd240678e9eb2655ef96cd51f876905687805025da6a7d8007a6d238f321ec59d3805163f28c78ece232ce6e8d7dbbd889202c16f00e
7
- data.tar.gz: e399113c469e5307865f04fa3e2f647b5257d4ec6b6cf1e23f8207bbfb435f4789181a46eb886588e0ae2474e8b40e103ead213e79e5f5a72c1d819de7aaae85
6
+ metadata.gz: 49fbb5bfd0b9b19cf856910de7408839215918ed0c23e88c04601449a0361ac32cd15a525aa0566d87f1acec47862d08908457734e290dc0335a62193fbc36c6
7
+ data.tar.gz: 17267734fb8e0d4217e4eac13b874531ea2d8d70d8836566aeec85150c58748947abb3dd710e43dfbea6138776d8af454da403946bde7420f78cb46f3c1059a3
@@ -13,5 +13,5 @@
13
13
  //= require jquery
14
14
  //= require jquery_ujs
15
15
  //= require jquery.cookie
16
- //= require detect_timezone
16
+ //= require jstz
17
17
  //= require browser_timezone_rails/set_time_zone
@@ -0,0 +1,358 @@
1
+ /**
2
+ * This script gives you the zone info key representing your device's time zone setting.
3
+ *
4
+ * @name jsTimezoneDetect
5
+ * @version 1.0.5
6
+ * @author Jon Nylander
7
+ * @license MIT License - http://www.opensource.org/licenses/mit-license.php
8
+ *
9
+ * For usage and examples, visit:
10
+ * http://pellepim.bitbucket.org/jstz/
11
+ *
12
+ * Copyright (c) Jon Nylander
13
+ */
14
+
15
+ /*jslint undef: true */
16
+ /*global console, exports*/
17
+
18
+ (function(root) {
19
+ /**
20
+ * Namespace to hold all the code for timezone detection.
21
+ */
22
+ var jstz = (function () {
23
+ 'use strict';
24
+ var HEMISPHERE_SOUTH = 's',
25
+
26
+ /**
27
+ * Gets the offset in minutes from UTC for a certain date.
28
+ * @param {Date} date
29
+ * @returns {Number}
30
+ */
31
+ get_date_offset = function (date) {
32
+ var offset = -date.getTimezoneOffset();
33
+ return (offset !== null ? offset : 0);
34
+ },
35
+
36
+ get_date = function (year, month, date) {
37
+ var d = new Date();
38
+ if (year !== undefined) {
39
+ d.setFullYear(year);
40
+ }
41
+ d.setMonth(month);
42
+ d.setDate(date);
43
+ return d;
44
+ },
45
+
46
+ get_january_offset = function (year) {
47
+ return get_date_offset(get_date(year, 0 ,2));
48
+ },
49
+
50
+ get_june_offset = function (year) {
51
+ return get_date_offset(get_date(year, 5, 2));
52
+ },
53
+
54
+ /**
55
+ * Private method.
56
+ * Checks whether a given date is in daylight saving time.
57
+ * If the date supplied is after august, we assume that we're checking
58
+ * for southern hemisphere DST.
59
+ * @param {Date} date
60
+ * @returns {Boolean}
61
+ */
62
+ date_is_dst = function (date) {
63
+ var is_southern = date.getMonth() > 7,
64
+ base_offset = is_southern ? get_june_offset(date.getFullYear()) :
65
+ get_january_offset(date.getFullYear()),
66
+ date_offset = get_date_offset(date),
67
+ is_west = base_offset < 0,
68
+ dst_offset = base_offset - date_offset;
69
+
70
+ if (!is_west && !is_southern) {
71
+ return dst_offset < 0;
72
+ }
73
+
74
+ return dst_offset !== 0;
75
+ },
76
+
77
+ /**
78
+ * This function does some basic calculations to create information about
79
+ * the user's timezone. It uses REFERENCE_YEAR as a solid year for which
80
+ * the script has been tested rather than depend on the year set by the
81
+ * client device.
82
+ *
83
+ * Returns a key that can be used to do lookups in jstz.olson.timezones.
84
+ * eg: "720,1,2".
85
+ *
86
+ * @returns {String}
87
+ */
88
+
89
+ lookup_key = function () {
90
+ var january_offset = get_january_offset(),
91
+ june_offset = get_june_offset(),
92
+ diff = january_offset - june_offset;
93
+
94
+ if (diff < 0) {
95
+ return january_offset + ",1";
96
+ } else if (diff > 0) {
97
+ return june_offset + ",1," + HEMISPHERE_SOUTH;
98
+ }
99
+
100
+ return january_offset + ",0";
101
+ },
102
+
103
+ /**
104
+ * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.
105
+ *
106
+ * Returns a primitive object on the format:
107
+ * {'timezone': TimeZone, 'key' : 'the key used to find the TimeZone object'}
108
+ *
109
+ * @returns Object
110
+ */
111
+ determine = function () {
112
+ var key = lookup_key();
113
+ return new jstz.TimeZone(jstz.olson.timezones[key]);
114
+ },
115
+
116
+ /**
117
+ * This object contains information on when daylight savings starts for
118
+ * different timezones.
119
+ *
120
+ * The list is short for a reason. Often we do not have to be very specific
121
+ * to single out the correct timezone. But when we do, this list comes in
122
+ * handy.
123
+ *
124
+ * Each value is a date denoting when daylight savings starts for that timezone.
125
+ */
126
+ dst_start_for = function (tz_name) {
127
+
128
+ var ru_pre_dst_change = new Date(2010, 6, 15, 1, 0, 0, 0), // In 2010 Russia had DST, this allows us to detect Russia :)
129
+ dst_starts = {
130
+ 'America/Denver': new Date(2011, 2, 13, 3, 0, 0, 0),
131
+ 'America/Mazatlan': new Date(2011, 3, 3, 3, 0, 0, 0),
132
+ 'America/Chicago': new Date(2011, 2, 13, 3, 0, 0, 0),
133
+ 'America/Mexico_City': new Date(2011, 3, 3, 3, 0, 0, 0),
134
+ 'America/Asuncion': new Date(2012, 9, 7, 3, 0, 0, 0),
135
+ 'America/Santiago': new Date(2012, 9, 3, 3, 0, 0, 0),
136
+ 'America/Campo_Grande': new Date(2012, 9, 21, 5, 0, 0, 0),
137
+ 'America/Montevideo': new Date(2011, 9, 2, 3, 0, 0, 0),
138
+ 'America/Sao_Paulo': new Date(2011, 9, 16, 5, 0, 0, 0),
139
+ 'America/Los_Angeles': new Date(2011, 2, 13, 8, 0, 0, 0),
140
+ 'America/Santa_Isabel': new Date(2011, 3, 5, 8, 0, 0, 0),
141
+ 'America/Havana': new Date(2012, 2, 10, 2, 0, 0, 0),
142
+ 'America/New_York': new Date(2012, 2, 10, 7, 0, 0, 0),
143
+ 'Europe/Helsinki': new Date(2013, 2, 31, 5, 0, 0, 0),
144
+ 'Pacific/Auckland': new Date(2011, 8, 26, 7, 0, 0, 0),
145
+ 'America/Halifax': new Date(2011, 2, 13, 6, 0, 0, 0),
146
+ 'America/Goose_Bay': new Date(2011, 2, 13, 2, 1, 0, 0),
147
+ 'America/Miquelon': new Date(2011, 2, 13, 5, 0, 0, 0),
148
+ 'America/Godthab': new Date(2011, 2, 27, 1, 0, 0, 0),
149
+ 'Europe/Moscow': ru_pre_dst_change,
150
+ 'Asia/Amman': new Date(2013, 2, 29, 1, 0, 0, 0),
151
+ 'Asia/Beirut': new Date(2013, 2, 31, 2, 0, 0, 0),
152
+ 'Asia/Damascus': new Date(2013, 3, 6, 2, 0, 0, 0),
153
+ 'Asia/Jerusalem': new Date(2013, 2, 29, 5, 0, 0, 0),
154
+ 'Asia/Yekaterinburg': ru_pre_dst_change,
155
+ 'Asia/Omsk': ru_pre_dst_change,
156
+ 'Asia/Krasnoyarsk': ru_pre_dst_change,
157
+ 'Asia/Irkutsk': ru_pre_dst_change,
158
+ 'Asia/Yakutsk': ru_pre_dst_change,
159
+ 'Asia/Vladivostok': ru_pre_dst_change,
160
+ 'Asia/Baku': new Date(2013, 2, 31, 4, 0, 0),
161
+ 'Asia/Yerevan': new Date(2013, 2, 31, 3, 0, 0),
162
+ 'Asia/Kamchatka': ru_pre_dst_change,
163
+ 'Asia/Gaza': new Date(2010, 2, 27, 4, 0, 0),
164
+ 'Africa/Cairo': new Date(2010, 4, 1, 3, 0, 0),
165
+ 'Europe/Minsk': ru_pre_dst_change,
166
+ 'Pacific/Apia': new Date(2010, 10, 1, 1, 0, 0, 0),
167
+ 'Pacific/Fiji': new Date(2010, 11, 1, 0, 0, 0),
168
+ 'Australia/Perth': new Date(2008, 10, 1, 1, 0, 0, 0)
169
+ };
170
+
171
+ return dst_starts[tz_name];
172
+ };
173
+
174
+ return {
175
+ determine: determine,
176
+ date_is_dst: date_is_dst,
177
+ dst_start_for: dst_start_for
178
+ };
179
+ }());
180
+
181
+ /**
182
+ * Simple object to perform ambiguity check and to return name of time zone.
183
+ */
184
+ jstz.TimeZone = function (tz_name) {
185
+ 'use strict';
186
+ /**
187
+ * The keys in this object are timezones that we know may be ambiguous after
188
+ * a preliminary scan through the olson_tz object.
189
+ *
190
+ * The array of timezones to compare must be in the order that daylight savings
191
+ * starts for the regions.
192
+ */
193
+ var AMBIGUITIES = {
194
+ 'America/Denver': ['America/Denver', 'America/Mazatlan'],
195
+ 'America/Chicago': ['America/Chicago', 'America/Mexico_City'],
196
+ 'America/Santiago': ['America/Santiago', 'America/Asuncion', 'America/Campo_Grande'],
197
+ 'America/Montevideo': ['America/Montevideo', 'America/Sao_Paulo'],
198
+ 'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Asia/Beirut', 'Europe/Helsinki','Asia/Damascus'],
199
+ 'Pacific/Auckland': ['Pacific/Auckland', 'Pacific/Fiji'],
200
+ 'America/Los_Angeles': ['America/Los_Angeles', 'America/Santa_Isabel'],
201
+ 'America/New_York': ['America/Havana', 'America/New_York'],
202
+ 'America/Halifax': ['America/Goose_Bay', 'America/Halifax'],
203
+ 'America/Godthab': ['America/Miquelon', 'America/Godthab'],
204
+ 'Asia/Dubai': ['Europe/Moscow'],
205
+ 'Asia/Dhaka': ['Asia/Yekaterinburg'],
206
+ 'Asia/Jakarta': ['Asia/Omsk'],
207
+ 'Asia/Shanghai': ['Asia/Krasnoyarsk', 'Australia/Perth'],
208
+ 'Asia/Tokyo': ['Asia/Irkutsk'],
209
+ 'Australia/Brisbane': ['Asia/Yakutsk'],
210
+ 'Pacific/Noumea': ['Asia/Vladivostok'],
211
+ 'Pacific/Tarawa': ['Asia/Kamchatka', 'Pacific/Fiji'],
212
+ 'Pacific/Tongatapu': ['Pacific/Apia'],
213
+ 'Asia/Baghdad': ['Europe/Minsk'],
214
+ 'Asia/Baku': ['Asia/Yerevan','Asia/Baku'],
215
+ 'Africa/Johannesburg': ['Asia/Gaza', 'Africa/Cairo']
216
+ },
217
+
218
+ timezone_name = tz_name,
219
+
220
+ /**
221
+ * Checks if a timezone has possible ambiguities. I.e timezones that are similar.
222
+ *
223
+ * For example, if the preliminary scan determines that we're in America/Denver.
224
+ * We double check here that we're really there and not in America/Mazatlan.
225
+ *
226
+ * This is done by checking known dates for when daylight savings start for different
227
+ * timezones during 2010 and 2011.
228
+ */
229
+ ambiguity_check = function () {
230
+ var ambiguity_list = AMBIGUITIES[timezone_name],
231
+ length = ambiguity_list.length,
232
+ i = 0,
233
+ tz = ambiguity_list[0];
234
+
235
+ for (; i < length; i += 1) {
236
+ tz = ambiguity_list[i];
237
+
238
+ if (jstz.date_is_dst(jstz.dst_start_for(tz))) {
239
+ timezone_name = tz;
240
+ return;
241
+ }
242
+ }
243
+ },
244
+
245
+ /**
246
+ * Checks if it is possible that the timezone is ambiguous.
247
+ */
248
+ is_ambiguous = function () {
249
+ return typeof (AMBIGUITIES[timezone_name]) !== 'undefined';
250
+ };
251
+
252
+ if (is_ambiguous()) {
253
+ ambiguity_check();
254
+ }
255
+
256
+ return {
257
+ name: function () {
258
+ return timezone_name;
259
+ }
260
+ };
261
+ };
262
+
263
+ jstz.olson = {};
264
+
265
+ /*
266
+ * The keys in this dictionary are comma separated as such:
267
+ *
268
+ * First the offset compared to UTC time in minutes.
269
+ *
270
+ * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it
271
+ * does.
272
+ *
273
+ * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,
274
+ * only interesting for timezones with DST.
275
+ *
276
+ * The mapped arrays is used for constructing the jstz.TimeZone object from within
277
+ * jstz.determine_timezone();
278
+ */
279
+ jstz.olson.timezones = {
280
+ '-720,0' : 'Pacific/Majuro',
281
+ '-660,0' : 'Pacific/Pago_Pago',
282
+ '-600,1' : 'America/Adak',
283
+ '-600,0' : 'Pacific/Honolulu',
284
+ '-570,0' : 'Pacific/Marquesas',
285
+ '-540,0' : 'Pacific/Gambier',
286
+ '-540,1' : 'America/Anchorage',
287
+ '-480,1' : 'America/Los_Angeles',
288
+ '-480,0' : 'Pacific/Pitcairn',
289
+ '-420,0' : 'America/Phoenix',
290
+ '-420,1' : 'America/Denver',
291
+ '-360,0' : 'America/Guatemala',
292
+ '-360,1' : 'America/Chicago',
293
+ '-360,1,s' : 'Pacific/Easter',
294
+ '-300,0' : 'America/Bogota',
295
+ '-300,1' : 'America/New_York',
296
+ '-270,0' : 'America/Caracas',
297
+ '-240,1' : 'America/Halifax',
298
+ '-240,0' : 'America/Santo_Domingo',
299
+ '-240,1,s' : 'America/Santiago',
300
+ '-210,1' : 'America/St_Johns',
301
+ '-180,1' : 'America/Godthab',
302
+ '-180,0' : 'America/Argentina/Buenos_Aires',
303
+ '-180,1,s' : 'America/Montevideo',
304
+ '-120,0' : 'America/Noronha',
305
+ '-120,1' : 'America/Noronha',
306
+ '-60,1' : 'Atlantic/Azores',
307
+ '-60,0' : 'Atlantic/Cape_Verde',
308
+ '0,0' : 'UTC',
309
+ '0,1' : 'Europe/London',
310
+ '60,1' : 'Europe/Berlin',
311
+ '60,0' : 'Africa/Lagos',
312
+ '60,1,s' : 'Africa/Windhoek',
313
+ '120,1' : 'Asia/Beirut',
314
+ '120,0' : 'Africa/Johannesburg',
315
+ '180,0' : 'Asia/Baghdad',
316
+ '180,1' : 'Europe/Moscow',
317
+ '210,1' : 'Asia/Tehran',
318
+ '240,0' : 'Asia/Dubai',
319
+ '240,1' : 'Asia/Baku',
320
+ '270,0' : 'Asia/Kabul',
321
+ '300,1' : 'Asia/Yekaterinburg',
322
+ '300,0' : 'Asia/Karachi',
323
+ '330,0' : 'Asia/Kolkata',
324
+ '345,0' : 'Asia/Kathmandu',
325
+ '360,0' : 'Asia/Dhaka',
326
+ '360,1' : 'Asia/Omsk',
327
+ '390,0' : 'Asia/Rangoon',
328
+ '420,1' : 'Asia/Krasnoyarsk',
329
+ '420,0' : 'Asia/Jakarta',
330
+ '480,0' : 'Asia/Shanghai',
331
+ '480,1' : 'Asia/Irkutsk',
332
+ '525,0' : 'Australia/Eucla',
333
+ '525,1,s' : 'Australia/Eucla',
334
+ '540,1' : 'Asia/Yakutsk',
335
+ '540,0' : 'Asia/Tokyo',
336
+ '570,0' : 'Australia/Darwin',
337
+ '570,1,s' : 'Australia/Adelaide',
338
+ '600,0' : 'Australia/Brisbane',
339
+ '600,1' : 'Asia/Vladivostok',
340
+ '600,1,s' : 'Australia/Sydney',
341
+ '630,1,s' : 'Australia/Lord_Howe',
342
+ '660,1' : 'Asia/Kamchatka',
343
+ '660,0' : 'Pacific/Noumea',
344
+ '690,0' : 'Pacific/Norfolk',
345
+ '720,1,s' : 'Pacific/Auckland',
346
+ '720,0' : 'Pacific/Tarawa',
347
+ '765,1,s' : 'Pacific/Chatham',
348
+ '780,0' : 'Pacific/Tongatapu',
349
+ '780,1,s' : 'Pacific/Apia',
350
+ '840,0' : 'Pacific/Kiritimati'
351
+ };
352
+
353
+ if (typeof exports !== 'undefined') {
354
+ exports.jstz = jstz;
355
+ } else {
356
+ root.jstz = jstz;
357
+ }
358
+ })(this);
@@ -1,3 +1,3 @@
1
1
  module BrowserTimezoneRails
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browser-timezone-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - kbaum
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-02 00:00:00.000000000 Z
11
+ date: 2014-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -101,18 +101,18 @@ executables: []
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
+ - MIT-LICENSE
105
+ - README.md
106
+ - Rakefile
104
107
  - app/assets/javascripts/browser_timezone_rails/application.js
105
108
  - app/assets/javascripts/browser_timezone_rails/set_time_zone.js.coffee
106
- - app/assets/javascripts/detect_timezone.js
107
109
  - app/assets/javascripts/jquery.cookie.js
110
+ - app/assets/javascripts/jstz.js
108
111
  - app/controllers/browser_timezone_rails/application_controller.rb
109
112
  - config/routes.rb
113
+ - lib/browser-timezone-rails.rb
110
114
  - lib/browser-timezone-rails/engine.rb
111
115
  - lib/browser-timezone-rails/version.rb
112
- - lib/browser-timezone-rails.rb
113
- - MIT-LICENSE
114
- - Rakefile
115
- - README.md
116
116
  homepage: https://github.com/kbaum/browser-timezone-rails
117
117
  licenses: []
118
118
  metadata: {}
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  version: '0'
133
133
  requirements: []
134
134
  rubyforge_project:
135
- rubygems_version: 2.0.3
135
+ rubygems_version: 2.2.2
136
136
  signing_key:
137
137
  specification_version: 4
138
138
  summary: Sets the browser timezone within rails
@@ -1,302 +0,0 @@
1
- /*jslint undef: true */
2
- /*global console*/
3
- /*version 2012-05-10*/
4
-
5
- /**
6
- * Namespace to hold all the code for timezone detection.
7
- */
8
- var jstz = (function () {
9
- 'use strict';
10
- var HEMISPHERE_SOUTH = 's',
11
-
12
- /**
13
- * Gets the offset in minutes from UTC for a certain date.
14
- * @param {Date} date
15
- * @returns {Number}
16
- */
17
- get_date_offset = function (date) {
18
- var offset = -date.getTimezoneOffset();
19
- return (offset !== null ? offset : 0);
20
- },
21
-
22
- get_january_offset = function () {
23
- return get_date_offset(new Date(2010, 0, 1, 0, 0, 0, 0));
24
- },
25
-
26
- get_june_offset = function () {
27
- return get_date_offset(new Date(2010, 5, 1, 0, 0, 0, 0));
28
- },
29
-
30
- /**
31
- * Private method.
32
- * Checks whether a given date is in daylight savings time.
33
- * If the date supplied is after june, we assume that we're checking
34
- * for southern hemisphere DST.
35
- * @param {Date} date
36
- * @returns {Boolean}
37
- */
38
- date_is_dst = function (date) {
39
- var base_offset = ((date.getMonth() > 5 ? get_june_offset()
40
- : get_january_offset())),
41
- date_offset = get_date_offset(date);
42
-
43
- return (base_offset - date_offset) !== 0;
44
- },
45
-
46
- /**
47
- * This function does some basic calculations to create information about
48
- * the user's timezone.
49
- *
50
- * Returns a key that can be used to do lookups in jstz.olson.timezones.
51
- *
52
- * @returns {String}
53
- */
54
-
55
- lookup_key = function () {
56
- var january_offset = get_january_offset(),
57
- june_offset = get_june_offset(),
58
- diff = get_january_offset() - get_june_offset();
59
-
60
- if (diff < 0) {
61
- return january_offset + ",1";
62
- } else if (diff > 0) {
63
- return june_offset + ",1," + HEMISPHERE_SOUTH;
64
- }
65
-
66
- return january_offset + ",0";
67
- },
68
-
69
- /**
70
- * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.
71
- *
72
- * Returns a primitive object on the format:
73
- * {'timezone': TimeZone, 'key' : 'the key used to find the TimeZone object'}
74
- *
75
- * @returns Object
76
- */
77
- determine = function () {
78
- var key = lookup_key();
79
- return new jstz.TimeZone(jstz.olson.timezones[key]);
80
- };
81
-
82
- return {
83
- determine_timezone : function () {
84
- if (typeof console !== 'undefined') {
85
- console.log("jstz.determine_timezone() is deprecated and will be removed in an upcoming version. Please use jstz.determine() instead.");
86
- }
87
- return determine();
88
- },
89
- determine: determine,
90
- date_is_dst : date_is_dst
91
- };
92
- }());
93
-
94
- /**
95
- * Simple object to perform ambiguity check and to return name of time zone.
96
- */
97
- jstz.TimeZone = function (tz_name) {
98
- 'use strict';
99
- var timezone_name = null,
100
-
101
- name = function () {
102
- return timezone_name;
103
- },
104
-
105
- /**
106
- * Checks if a timezone has possible ambiguities. I.e timezones that are similar.
107
- *
108
- * For example, if the preliminary scan determines that we're in America/Denver.
109
- * We double check here that we're really there and not in America/Mazatlan.
110
- *
111
- * This is done by checking known dates for when daylight savings start for different
112
- * timezones during 2010 and 2011.
113
- */
114
- ambiguity_check = function () {
115
- var ambiguity_list = jstz.olson.ambiguity_list[timezone_name],
116
- length = ambiguity_list.length,
117
- i = 0,
118
- tz = ambiguity_list[0];
119
-
120
- for (; i < length; i += 1) {
121
- tz = ambiguity_list[i];
122
-
123
- if (jstz.date_is_dst(jstz.olson.dst_start_dates[tz])) {
124
- timezone_name = tz;
125
- return;
126
- }
127
- }
128
- },
129
-
130
- /**
131
- * Checks if it is possible that the timezone is ambiguous.
132
- */
133
- is_ambiguous = function () {
134
- return typeof (jstz.olson.ambiguity_list[timezone_name]) !== 'undefined';
135
- };
136
-
137
-
138
-
139
- timezone_name = tz_name;
140
- if (is_ambiguous()) {
141
- ambiguity_check();
142
- }
143
-
144
- return {
145
- name: name
146
- };
147
- };
148
-
149
- jstz.olson = {};
150
-
151
- /*
152
- * The keys in this dictionary are comma separated as such:
153
- *
154
- * First the offset compared to UTC time in minutes.
155
- *
156
- * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it
157
- * does.
158
- *
159
- * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,
160
- * only interesting for timezones with DST.
161
- *
162
- * The mapped arrays is used for constructing the jstz.TimeZone object from within
163
- * jstz.determine_timezone();
164
- */
165
- jstz.olson.timezones = {
166
- '-720,0' : 'Etc/GMT+12',
167
- '-660,0' : 'Pacific/Pago_Pago',
168
- '-600,1' : 'America/Adak',
169
- '-600,0' : 'Pacific/Honolulu',
170
- '-570,0' : 'Pacific/Marquesas',
171
- '-540,0' : 'Pacific/Gambier',
172
- '-540,1' : 'America/Anchorage',
173
- '-480,1' : 'America/Los_Angeles',
174
- '-480,0' : 'Pacific/Pitcairn',
175
- '-420,0' : 'America/Phoenix',
176
- '-420,1' : 'America/Denver',
177
- '-360,0' : 'America/Guatemala',
178
- '-360,1' : 'America/Chicago',
179
- '-360,1,s' : 'Pacific/Easter',
180
- '-300,0' : 'America/Bogota',
181
- '-300,1' : 'America/New_York',
182
- '-270,0' : 'America/Caracas',
183
- '-240,1' : 'America/Halifax',
184
- '-240,0' : 'America/Santo_Domingo',
185
- '-240,1,s' : 'America/Asuncion',
186
- '-210,1' : 'America/St_Johns',
187
- '-180,1' : 'America/Godthab',
188
- '-180,0' : 'America/Argentina/Buenos_Aires',
189
- '-180,1,s' : 'America/Montevideo',
190
- '-120,0' : 'America/Noronha',
191
- '-120,1' : 'Etc/GMT+2',
192
- '-60,1' : 'Atlantic/Azores',
193
- '-60,0' : 'Atlantic/Cape_Verde',
194
- '0,0' : 'Etc/UTC',
195
- '0,1' : 'Europe/London',
196
- '60,1' : 'Europe/Berlin',
197
- '60,0' : 'Africa/Lagos',
198
- '60,1,s' : 'Africa/Windhoek',
199
- '120,1' : 'Asia/Beirut',
200
- '120,0' : 'Africa/Johannesburg',
201
- '180,1' : 'Europe/Moscow',
202
- '180,0' : 'Asia/Baghdad',
203
- '210,1' : 'Asia/Tehran',
204
- '240,0' : 'Asia/Dubai',
205
- '240,1' : 'Asia/Yerevan',
206
- '270,0' : 'Asia/Kabul',
207
- '300,1' : 'Asia/Yekaterinburg',
208
- '300,0' : 'Asia/Karachi',
209
- '330,0' : 'Asia/Kolkata',
210
- '345,0' : 'Asia/Kathmandu',
211
- '360,0' : 'Asia/Dhaka',
212
- '360,1' : 'Asia/Omsk',
213
- '390,0' : 'Asia/Rangoon',
214
- '420,1' : 'Asia/Krasnoyarsk',
215
- '420,0' : 'Asia/Jakarta',
216
- '480,0' : 'Asia/Shanghai',
217
- '480,1' : 'Asia/Irkutsk',
218
- '525,0' : 'Australia/Eucla',
219
- '525,1,s' : 'Australia/Eucla',
220
- '540,1' : 'Asia/Yakutsk',
221
- '540,0' : 'Asia/Tokyo',
222
- '570,0' : 'Australia/Darwin',
223
- '570,1,s' : 'Australia/Adelaide',
224
- '600,0' : 'Australia/Brisbane',
225
- '600,1' : 'Asia/Vladivostok',
226
- '600,1,s' : 'Australia/Sydney',
227
- '630,1,s' : 'Australia/Lord_Howe',
228
- '660,1' : 'Asia/Kamchatka',
229
- '660,0' : 'Pacific/Noumea',
230
- '690,0' : 'Pacific/Norfolk',
231
- '720,1,s' : 'Pacific/Auckland',
232
- '720,0' : 'Pacific/Tarawa',
233
- '765,1,s' : 'Pacific/Chatham',
234
- '780,0' : 'Pacific/Tongatapu',
235
- '780,1,s' : 'Pacific/Apia',
236
- '840,0' : 'Pacific/Kiritimati'
237
- };
238
-
239
-
240
- /**
241
- * This object contains information on when daylight savings starts for
242
- * different timezones.
243
- *
244
- * The list is short for a reason. Often we do not have to be very specific
245
- * to single out the correct timezone. But when we do, this list comes in
246
- * handy.
247
- *
248
- * Each value is a date denoting when daylight savings starts for that timezone.
249
- */
250
- jstz.olson.dst_start_dates = {
251
- 'America/Denver' : new Date(2011, 2, 13, 3, 0, 0, 0),
252
- 'America/Mazatlan' : new Date(2011, 3, 3, 3, 0, 0, 0),
253
- 'America/Chicago' : new Date(2011, 2, 13, 3, 0, 0, 0),
254
- 'America/Mexico_City' : new Date(2011, 3, 3, 3, 0, 0, 0),
255
- 'Atlantic/Stanley' : new Date(2011, 8, 4, 7, 0, 0, 0),
256
- 'America/Asuncion' : new Date(2011, 9, 2, 3, 0, 0, 0),
257
- 'America/Santiago' : new Date(2011, 9, 9, 3, 0, 0, 0),
258
- 'America/Campo_Grande' : new Date(2011, 9, 16, 5, 0, 0, 0),
259
- 'America/Montevideo' : new Date(2011, 9, 2, 3, 0, 0, 0),
260
- 'America/Sao_Paulo' : new Date(2011, 9, 16, 5, 0, 0, 0),
261
- 'America/Los_Angeles' : new Date(2011, 2, 13, 8, 0, 0, 0),
262
- 'America/Santa_Isabel' : new Date(2011, 3, 5, 8, 0, 0, 0),
263
- 'America/Havana' : new Date(2011, 2, 13, 2, 0, 0, 0),
264
- 'America/New_York' : new Date(2011, 2, 13, 7, 0, 0, 0),
265
- 'Asia/Gaza' : new Date(2011, 2, 26, 23, 0, 0, 0),
266
- 'Asia/Beirut' : new Date(2011, 2, 27, 1, 0, 0, 0),
267
- 'Europe/Minsk' : new Date(2011, 2, 27, 2, 0, 0, 0),
268
- 'Europe/Helsinki' : new Date(2011, 2, 27, 4, 0, 0, 0),
269
- 'Europe/Istanbul' : new Date(2011, 2, 28, 5, 0, 0, 0),
270
- 'Asia/Damascus' : new Date(2011, 3, 1, 2, 0, 0, 0),
271
- 'Asia/Jerusalem' : new Date(2011, 3, 1, 6, 0, 0, 0),
272
- 'Africa/Cairo' : new Date(2010, 3, 30, 4, 0, 0, 0),
273
- 'Asia/Yerevan' : new Date(2011, 2, 27, 4, 0, 0, 0),
274
- 'Asia/Baku' : new Date(2011, 2, 27, 8, 0, 0, 0),
275
- 'Pacific/Auckland' : new Date(2011, 8, 26, 7, 0, 0, 0),
276
- 'Pacific/Fiji' : new Date(2010, 11, 29, 23, 0, 0, 0),
277
- 'America/Halifax' : new Date(2011, 2, 13, 6, 0, 0, 0),
278
- 'America/Goose_Bay' : new Date(2011, 2, 13, 2, 1, 0, 0),
279
- 'America/Miquelon' : new Date(2011, 2, 13, 5, 0, 0, 0),
280
- 'America/Godthab' : new Date(2011, 2, 27, 1, 0, 0, 0)
281
- };
282
-
283
- /**
284
- * The keys in this object are timezones that we know may be ambiguous after
285
- * a preliminary scan through the olson_tz object.
286
- *
287
- * The array of timezones to compare must be in the order that daylight savings
288
- * starts for the regions.
289
- */
290
- jstz.olson.ambiguity_list = {
291
- 'America/Denver' : ['America/Denver', 'America/Mazatlan'],
292
- 'America/Chicago' : ['America/Chicago', 'America/Mexico_City'],
293
- 'America/Asuncion' : ['Atlantic/Stanley', 'America/Asuncion', 'America/Santiago', 'America/Campo_Grande'],
294
- 'America/Montevideo' : ['America/Montevideo', 'America/Sao_Paulo'],
295
- 'Asia/Beirut' : ['Asia/Gaza', 'Asia/Beirut', 'Europe/Minsk', 'Europe/Helsinki', 'Europe/Istanbul', 'Asia/Damascus', 'Asia/Jerusalem', 'Africa/Cairo'],
296
- 'Asia/Yerevan' : ['Asia/Yerevan', 'Asia/Baku'],
297
- 'Pacific/Auckland' : ['Pacific/Auckland', 'Pacific/Fiji'],
298
- 'America/Los_Angeles' : ['America/Los_Angeles', 'America/Santa_Isabel'],
299
- 'America/New_York' : ['America/Havana', 'America/New_York'],
300
- 'America/Halifax' : ['America/Goose_Bay', 'America/Halifax'],
301
- 'America/Godthab' : ['America/Miquelon', 'America/Godthab']
302
- };