Skip to content

Commit 2cfc335

Browse files
committed
fix: Clicking DST date from outside DST and active timezone increments by an hour (fixes #1059)
1 parent fb8df1f commit 2cfc335

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

src/VueDatePicker/utils/timezone.ts

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

31+
const isDST = (date: Date) => {
32+
const january = new Date(date.getFullYear(), 0, 1);
33+
34+
const januaryOffset = january.getTimezoneOffset();
35+
const dateOffset = date.getTimezoneOffset();
36+
37+
return dateOffset < januaryOffset;
38+
};
39+
3140
export const getTimezoneOffset = (timezone?: string, localDate?: Date) => {
3241
if (!timezone) return 0;
3342
const date = new Date();
3443
const utcDate = new Date(date.toLocaleString('en-US', { timeZone: 'UTC' }));
3544
const specificDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }));
36-
const dstOffset = (localDate ?? specificDate).getTimezoneOffset() / 60;
45+
const dateToOffset = isDST(localDate, timezone) ? specificDate : localDate;
46+
const dstOffset = dateToOffset.getTimezoneOffset() / 60;
3747
return (+utcDate - +specificDate) / (1000 * 60 * 60) - dstOffset;
3848
};

0 commit comments

Comments
 (0)