Skip to content

Commit f7d747d

Browse files
committed
Add zoneOffset cache to resetCaches
1 parent 51427ef commit f7d747d

File tree

3 files changed

+27
-27
lines changed

3 files changed

+27
-27
lines changed

src/datetime.js

+22-21
Original file line numberDiff line numberDiff line change
@@ -390,14 +390,14 @@ function normalizeUnitWithLocalWeeks(unit) {
390390
// higher-order units from tsNow (as we do in fromObject, this requires that
391391
// offset is calculated from tsNow).
392392
function guessOffsetForZone(zone) {
393-
if (!DateTime._zoneOffsetGuessCache[zone]) {
394-
if (DateTime._zoneOffsetTs === undefined) {
395-
DateTime._zoneOffsetTs = Settings.now();
393+
if (!zoneOffsetGuessCache[zone]) {
394+
if (zoneOffsetTs === undefined) {
395+
zoneOffsetTs = Settings.now();
396396
}
397397

398-
DateTime._zoneOffsetGuessCache[zone] = zone.offset(DateTime._zoneOffsetTs);
398+
zoneOffsetGuessCache[zone] = zone.offset(zoneOffsetTs);
399399
}
400-
return DateTime._zoneOffsetGuessCache[zone];
400+
return zoneOffsetGuessCache[zone];
401401
}
402402

403403
// this is a dumbed down version of fromObject() that runs about 60% faster
@@ -477,6 +477,18 @@ function lastOpts(argList) {
477477
return [opts, args];
478478
}
479479

480+
/**
481+
* Timestamp to use for cached zone offset guesses (exposed for test)
482+
*/
483+
let zoneOffsetTs;
484+
/**
485+
* Cache for zone offset guesses (exposed for test).
486+
*
487+
* This optimizes quickDT via guessOffsetForZone to avoid repeated calls of
488+
* zone.offset().
489+
*/
490+
let zoneOffsetGuessCache = {};
491+
480492
/**
481493
* A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.
482494
*
@@ -565,22 +577,6 @@ export default class DateTime {
565577
this.isLuxonDateTime = true;
566578
}
567579

568-
/**
569-
* Timestamp to use for cached zone offset guesses (exposed for test)
570-
*
571-
* @access private
572-
*/
573-
static _zoneOffsetTs;
574-
/**
575-
* Cache for zone offset guesses (exposed for test).
576-
*
577-
* This optimizes quickDT via guessOffsetForZone to avoid repeated calls of
578-
* zone.offset().
579-
*
580-
* @access private
581-
*/
582-
static _zoneOffsetGuessCache = {};
583-
584580
// CONSTRUCT
585581

586582
/**
@@ -1045,6 +1041,11 @@ export default class DateTime {
10451041
return expanded.map((t) => t.val).join("");
10461042
}
10471043

1044+
static resetCache() {
1045+
zoneOffsetTs = undefined;
1046+
zoneOffsetGuessCache = {};
1047+
}
1048+
10481049
// INFO
10491050

10501051
/**

src/settings.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import SystemZone from "./zones/systemZone.js";
22
import IANAZone from "./zones/IANAZone.js";
33
import Locale from "./impl/locale.js";
4+
import DateTime from "./datetime.js";
45

56
import { normalizeZone } from "./impl/zoneUtil.js";
67
import { validateWeekSettings } from "./impl/util.js";
@@ -172,6 +173,7 @@ export default class Settings {
172173
static resetCaches() {
173174
Locale.resetCache();
174175
IANAZone.resetCache();
176+
DateTime.resetCache();
175177
resetDigitRegexCache();
176178
}
177179
}

test/datetime/dst.test.js

+3-6
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ for (const [name, local] of Object.entries(dateTimeConstructors)) {
3939
test("Ambiguous dates pick the one with the cached offset", () => {
4040
const oldSettings = Settings.now;
4141
try {
42-
DateTime._zoneOffsetGuessCache = {};
43-
DateTime._zoneOffsetTs = undefined;
42+
Settings.resetCaches();
4443
Settings.now = () => 1495653314595; // May 24, 2017
4544
let d = local(2017, 11, 5, 1);
4645
expect(d.hour).toBe(1);
@@ -51,8 +50,7 @@ for (const [name, local] of Object.entries(dateTimeConstructors)) {
5150
expect(d.hour).toBe(1);
5251
expect(d.offset).toBe(-4 * 60);
5352

54-
DateTime._zoneOffsetGuessCache = {};
55-
DateTime._zoneOffsetTs = undefined;
53+
Settings.resetCaches();
5654

5755
Settings.now = () => 1484456400000; // Jan 15, 2017
5856
d = local(2017, 11, 5, 1);
@@ -171,8 +169,7 @@ describe("DateTime.local() with offset caching", () => {
171169
const oldSettings = Settings.now;
172170
try {
173171
Settings.now = () => cacheTs;
174-
DateTime._zoneOffsetGuessCache = {};
175-
DateTime._zoneOffsetTs = undefined;
172+
Settings.resetCaches();
176173
// load cache
177174
DateTime.local(2020, 1, 1, 0, zoneObj);
178175

0 commit comments

Comments
 (0)