@sprucelabs/calendar-utils 36.1.4 → 36.1.5

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.
@@ -2,6 +2,7 @@ import { AbstractEventEmitter } from '@sprucelabs/mercury-event-emitter';
2
2
  import { Locale, TimezoneName } from '../types/calendar.types';
3
3
  export default class LocaleImpl extends AbstractEventEmitter<LocaleContract> implements Locale {
4
4
  private zoneNameByOffset;
5
+ private offsetsForDate;
5
6
  private offset;
6
7
  protected currentZone?: TimezoneName;
7
8
  private timezoneChoices;
@@ -18,6 +18,7 @@ export default class LocaleImpl extends AbstractEventEmitter {
18
18
  constructor() {
19
19
  super(localeContract);
20
20
  this.zoneNameByOffset = {};
21
+ this.offsetsForDate = {};
21
22
  this.offset = new Date().getTimezoneOffset() * -1;
22
23
  const sorter = new TimezoneChoiceSorter(this);
23
24
  this.timezoneChoices = sorter.sort(timezoneChoices);
@@ -28,7 +29,12 @@ export default class LocaleImpl extends AbstractEventEmitter {
28
29
  }
29
30
  getTimezoneOffsetMinutes(onDate) {
30
31
  if (onDate) {
31
- return this.zoneNameToOffsetMinutes(this.getZoneName(), onDate);
32
+ const dateRoundedToNearestHour = onDate - (onDate % 3600000);
33
+ const key = `${this.getZoneName()}-${dateRoundedToNearestHour}`;
34
+ if (!this.offsetsForDate[key]) {
35
+ this.offsetsForDate[key] = this.zoneNameToOffsetMinutes(this.getZoneName(), onDate);
36
+ }
37
+ return this.offsetsForDate[key];
32
38
  }
33
39
  return this.offset;
34
40
  }
@@ -2,6 +2,7 @@ import { AbstractEventEmitter } from '@sprucelabs/mercury-event-emitter';
2
2
  import { Locale, TimezoneName } from '../types/calendar.types';
3
3
  export default class LocaleImpl extends AbstractEventEmitter<LocaleContract> implements Locale {
4
4
  private zoneNameByOffset;
5
+ private offsetsForDate;
5
6
  private offset;
6
7
  protected currentZone?: TimezoneName;
7
8
  private timezoneChoices;
@@ -14,6 +14,7 @@ class LocaleImpl extends mercury_event_emitter_1.AbstractEventEmitter {
14
14
  constructor() {
15
15
  super(localeContract);
16
16
  this.zoneNameByOffset = {};
17
+ this.offsetsForDate = {};
17
18
  this.offset = new Date().getTimezoneOffset() * -1;
18
19
  const sorter = new TimezoneChoiceSorter_1.default(this);
19
20
  this.timezoneChoices = sorter.sort(spruce_core_schemas_1.timezoneChoices);
@@ -24,7 +25,12 @@ class LocaleImpl extends mercury_event_emitter_1.AbstractEventEmitter {
24
25
  }
25
26
  getTimezoneOffsetMinutes(onDate) {
26
27
  if (onDate) {
27
- return this.zoneNameToOffsetMinutes(this.getZoneName(), onDate);
28
+ const dateRoundedToNearestHour = onDate - (onDate % 3600000);
29
+ const key = `${this.getZoneName()}-${dateRoundedToNearestHour}`;
30
+ if (!this.offsetsForDate[key]) {
31
+ this.offsetsForDate[key] = this.zoneNameToOffsetMinutes(this.getZoneName(), onDate);
32
+ }
33
+ return this.offsetsForDate[key];
28
34
  }
29
35
  return this.offset;
30
36
  }
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "36.1.4",
6
+ "version": "36.1.5",
7
7
  "files": [
8
8
  "build/**/*",
9
9
  "!build/__tests__",