From a2f93f7862dba5c810c5c917be4f593415dfd655 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 15 Sep 2025 16:40:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E5=A4=8D=E5=A5=87=E5=AE=89?= =?UTF-8?q?=E4=BF=A1=E6=B5=8F=E8=A7=88=E5=99=A8=E6=97=B6=E5=8C=BA=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/date-utils.ts | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/utils/date-utils.ts b/src/utils/date-utils.ts index 4646d25c..70d87132 100644 --- a/src/utils/date-utils.ts +++ b/src/utils/date-utils.ts @@ -17,6 +17,35 @@ export const RFC3339 = 'YYYY-MM-DDTHH:mm:ssZ'; /**国际时间 列如:Thu, Nov 14 2024 10:19 GMT+08:00 */ export const RFC822Z = 'ddd, MMM DD YYYY HH:mm [GMT]Z'; +// 映射时区偏移量与IANA时区名称关联 +export const offsetToIanaMap: Record = { + '+0000': 'UTC', + '+0100': 'Europe/London', + '+0200': 'Europe/Paris', + '+0300': 'Europe/Moscow', + '+0400': 'Asia/Dubai', + '+0500': 'Asia/Karachi', + '+0600': 'Asia/Almaty', + '+0700': 'Asia/Bangkok', + '+0800': 'Asia/Shanghai', + '+0900': 'Asia/Tokyo', + '+1000': 'Australia/Sydney', + '+1100': 'Pacific/Noumea', + '+1200': 'Pacific/Fiji', + '-0100': 'America/Noronha', + '-0200': 'Atlantic/Azores', + '-0300': 'America/Argentina/Buenos_Aires', + '-0400': 'America/New_York', + '-0500': 'America/New_York', + '-0600': 'America/Chicago', + '-0700': 'America/Denver', + '-0800': 'America/Los_Angeles', + '-0900': 'Pacific/Honolulu', + '-1000': 'Pacific/Honolulu', + '-1100': 'Pacific/Pago_Pago', + '-1200': 'Pacific/Kwajalein', +}; + /** * 格式时间字符串 * @param dateStr 时间字符串 @@ -53,9 +82,10 @@ export function parseDateUTCToStr( date: string | number | Date, offset: string = '+0000' ): string { + const ianaTimezone = offsetToIanaMap[offset] || 'UTC'; return dayjs .utc(date) // 将时间戳按 UTC 时间 - .tz(offset) // 使用时区偏移 + .tz(ianaTimezone) // 使用时区偏移 .format(`YYYY-MM-DD HH:mm:ss [UTC${offset}]`); // 格式化时间 }