From 2bce92dc0cf8dd2d4d8ed97b070f65c4b07c83e2 Mon Sep 17 00:00:00 2001 From: kennethcheng Date: Tue, 28 Apr 2026 18:01:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(utils):=20=E7=A7=BB=E9=99=A4=20utils.ts=20?= =?UTF-8?q?=E4=B8=AD=E9=87=8D=E5=A4=8D=E5=AE=9A=E4=B9=89=E7=9A=84=20format?= =?UTF-8?q?DateForDatetimeLocal=20=E5=87=BD=E6=95=B0=EF=BC=8C=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E7=BC=96=E8=AF=91=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libs/utils.ts | 69 ++--------------------------------------------- 1 file changed, 2 insertions(+), 67 deletions(-) diff --git a/src/libs/utils.ts b/src/libs/utils.ts index df629e0..48154cd 100644 --- a/src/libs/utils.ts +++ b/src/libs/utils.ts @@ -55,71 +55,6 @@ export function parseDateTimeLocalToUTC(value: string): Date | null { } export function nowInShanghai(): Date { - const now = new Date() - const utcStr = now.toLocaleString("en-US", { timeZone: "UTC" }) - const utcDate = new Date(utcStr) - const shanghaiOffset = getTimezoneOffset("Asia/Shanghai") - const utcOffset = 0 - return new Date(utcDate.getTime() + (shanghaiOffset - utcOffset)) -} - -export function formatDateForDatetimeLocal(date: Date): string { - const zoned = toZonedTime(date, TIMEZONE) - const year = zoned.getFullYear() - const month = String(zoned.getMonth() + 1).padStart(2, "0") - const day = String(zoned.getDate()).padStart(2, "0") - const hours = String(zoned.getHours()).padStart(2, "0") - const minutes = String(zoned.getMinutes()).padStart(2, "0") - return `${year}-${month}-${day}T${hours}:${minutes}` -} - -function getTimezoneOffset(timezone: string): number { - const formatter = new Intl.DateTimeFormat("en-US", { - timeZone: timezone, - timeZoneName: "longOffset", - }) - const parts = formatter.formatToParts(new Date()) - const tzPart = parts.find((p) => p.type === "timeZoneName") - if (!tzPart) return 0 - const match = tzPart.value.match(/([+-]?\d{1,2}):?(\d{2})/) - if (!match) return 0 - const hours = parseInt(match[1], 10) - const minutes = parseInt(match[2], 10) - return (hours * 60 + minutes) * 60 * 1000 -} - -export function parseDateTimeLocalToUTC(value: string): Date | null { - if (!value) return null - const zoned = fromZonedTime(value, TIMEZONE) - return zoned -} - -export function parseDateTimeLocalToUTC_v2(year: number, month: number, day: number, hours: number, minutes: number): Date { - const shanghaiTime = new Date() - shanghaiTime.setFullYear(year) - shanghaiTime.setMonth(month) - shanghaiTime.setDate(day) - shanghaiTime.setHours(hours, minutes, 0, 0) - - const shanghaiOffsetMs = getShanghaiOffsetMs(shanghaiTime) - const utcMs = shanghaiTime.getTime() - shanghaiOffsetMs - return new Date(utcMs) -} - -function getShanghaiOffsetMs(date: Date): number { - const formatter = new Intl.DateTimeFormat("en-US", { - timeZone: "Asia/Shanghai", - timeZoneName: "short", - }) - const parts = formatter.formatToParts(date) - const tzPart = parts.find((p) => p.type === "timeZoneName") - if (!tzPart) return 8 * 60 * 60 * 1000 - - const match = tzPart.value.match(/([+-])(\d{2}):?(\d{2})/) - if (!match) return 8 * 60 * 60 * 1000 - - const sign = match[1] === "+" ? 1 : -1 - const offsetHours = parseInt(match[2], 10) - const offsetMinutes = parseInt(match[3], 10) - return sign * (offsetHours * 60 + offsetMinutes) * 60 * 1000 + const shanghaiOffsetMs = getShanghaiOffsetMs() + return new Date(Date.now() + shanghaiOffsetMs) } \ No newline at end of file