Skip to content

Commit 3ac0d3e

Browse files
committed
fix: Selecting dates between DST and non DST timezone results in hours updating every selection (fixes #991)
1 parent 234975f commit 3ac0d3e

File tree

3 files changed

+4
-5
lines changed

3 files changed

+4
-5
lines changed

src/VueDatePicker/composables/external-internal-mapper.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export const useExternalInternalMapper = (emit: VueEmit, props: AllPropsType, is
6363

6464
const convertZonedModelToLocal = (date: Date) => {
6565
if (defaultedTz.value.timezone && defaultedTz.value.convertModel) {
66-
const offset = getTimezoneOffset(defaultedTz.value.timezone);
66+
const offset = getTimezoneOffset(defaultedTz.value.timezone, date);
6767
return addHours(date, offset);
6868
}
6969
return date;
@@ -394,7 +394,6 @@ export const useExternalInternalMapper = (emit: VueEmit, props: AllPropsType, is
394394
return getWeekFromDate(internalModelValue.value, props.weekStart).map((date) => getDate(date));
395395
};
396396

397-
398397
const modeEmitter = (mapper: any, returnOnly: boolean) =>
399398
emitValue(convertType(mapInternalToSpecificExternal(mapper)), false, returnOnly);
400399

src/VueDatePicker/utils/defaults.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export const defaultMultiCalendars = (multiCalendars?: MultiCalendarsProp): Mult
8888
};
8989
if (!multiCalendars) return { ...defaultOptions, count: getMultiCalendarsCount(false) };
9090
const addOptions = isConfig ? multiCalendars : ({} as MultiCalendarsOptions);
91-
const option = isConfig ? addOptions.count ?? true : multiCalendars;
91+
const option = isConfig ? (addOptions.count ?? true) : multiCalendars;
9292
const count = getMultiCalendarsCount(option);
9393

9494
return Object.assign(defaultOptions, addOptions, { count });

src/VueDatePicker/utils/timezone.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ export const sanitizeDateToLocal = (date: MaybeDate, tz?: TimeZoneConfig, reset?
2828
return tz.exactMatch ? getDateInTz(date, tz, reset) : localToTz(newDate, tz.timezone);
2929
};
3030

31-
export const getTimezoneOffset = (timezone?: string) => {
31+
export const getTimezoneOffset = (timezone?: string, localDate?: Date) => {
3232
if (!timezone) return 0;
3333
const date = new Date();
3434
const utcDate = new Date(date.toLocaleString('en-US', { timeZone: 'UTC' }));
3535
const specificDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }));
36-
const dstOffset = specificDate.getTimezoneOffset() / 60;
36+
const dstOffset = (localDate ?? specificDate).getTimezoneOffset() / 60;
3737
return (+utcDate - +specificDate) / (1000 * 60 * 60) - dstOffset;
3838
};

0 commit comments

Comments
 (0)