From 3296d21f6a69ffa982fc2829cefd2bb67b046f8e Mon Sep 17 00:00:00 2001 From: MaysWind Date: Wed, 2 Jul 2025 01:40:20 +0800 Subject: [PATCH] fix the bug that the date was not displayed correctly during daylight saving time (#163) --- src/locales/helpers.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/locales/helpers.ts b/src/locales/helpers.ts index 7c3ac893..7851cbef 100644 --- a/src/locales/helpers.ts +++ b/src/locales/helpers.ts @@ -1,5 +1,6 @@ import { useI18n as useVueI18n } from 'vue-i18n'; import moment from 'moment-timezone'; +import 'moment-timezone/moment-timezone-utils'; import type { PartialRecord, TypeAndName, TypeAndDisplayName, LocalizedSwitchOption } from '@/core/base.ts'; @@ -1817,11 +1818,19 @@ export function useI18n() { } function setTimeZone(timezone: string): void { + let timezoneOffsetMinutes = getBrowserTimezoneOffsetMinutes(); + if (timezone) { - moment.tz.setDefault(timezone); - } else { - moment.tz.setDefault(); + timezoneOffsetMinutes = getTimezoneOffsetMinutes(timezone); } + + moment.tz.add(moment.tz.pack({ + name: 'Fixed/Timezone', + abbrs: ['FIX'], + offsets: [-timezoneOffsetMinutes], + untils: [0] + })); + moment.tz.setDefault('Fixed/Timezone'); } function initLocale(lastUserLanguage?: string, timezone?: string): LocaleDefaultSettings | null { @@ -1839,6 +1848,7 @@ export function useI18n() { setTimeZone(timezone); } else { logger.info(`No timezone is set, use browser default ${getTimezoneOffset()} (maybe ${moment.tz.guess(true)})`); + setTimeZone(''); } return localeDefaultSettings;