|
309 | 309 | function userOffsets() {
|
310 | 310 | var startYear = new Date().getFullYear() - 2,
|
311 | 311 | last = new OffsetAt(new Date(startYear, 0, 1)),
|
| 312 | + lastOffset = last.offset, |
312 | 313 | offsets = [last],
|
313 |
| - change, next, i; |
| 314 | + change, next, nextOffset, i; |
314 | 315 |
|
315 | 316 | for (i = 1; i < 48; i++) {
|
316 |
| - next = new OffsetAt(new Date(startYear, i, 1)); |
317 |
| - if (next.offset !== last.offset) { |
| 317 | + nextOffset = new Date(startYear, i, 1).getTimezoneOffset(); |
| 318 | + if (nextOffset !== lastOffset) { |
| 319 | + // Create OffsetAt here to avoid unnecessary abbr parsing before checking offsets |
| 320 | + next = new OffsetAt(new Date(startYear, i, 1)); |
318 | 321 | change = findChange(last, next);
|
319 | 322 | offsets.push(change);
|
320 | 323 | offsets.push(new OffsetAt(new Date(change.at + 6e4)));
|
| 324 | + last = next; |
| 325 | + lastOffset = nextOffset; |
321 | 326 | }
|
322 |
| - last = next; |
323 | 327 | }
|
324 | 328 |
|
325 | 329 | for (i = 0; i < 4; i++) {
|
|
357 | 361 | var offsetsLength = offsets.length,
|
358 | 362 | filteredGuesses = {},
|
359 | 363 | out = [],
|
360 |
| - i, j, guessesOffset; |
| 364 | + checkedOffsets = {}, |
| 365 | + i, j, offset, guessesOffset; |
361 | 366 |
|
362 | 367 | for (i = 0; i < offsetsLength; i++) {
|
363 |
| - guessesOffset = guesses[offsets[i].offset] || {}; |
| 368 | + offset = offsets[i].offset; |
| 369 | + if (checkedOffsets.hasOwnProperty(offset)) { |
| 370 | + continue; |
| 371 | + } |
| 372 | + guessesOffset = guesses[offset] || {}; |
364 | 373 | for (j in guessesOffset) {
|
365 | 374 | if (guessesOffset.hasOwnProperty(j)) {
|
366 | 375 | filteredGuesses[j] = true;
|
367 | 376 | }
|
368 | 377 | }
|
| 378 | + checkedOffsets[offset] = true; |
369 | 379 | }
|
370 | 380 |
|
371 | 381 | for (i in filteredGuesses) {
|
|
0 commit comments