From 951a0579ce9c938a19ae492bf75c8c4e0443d5c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=A8=E9=9C=96=E9=93=83?= Date: Tue, 18 Nov 2025 23:38:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(timestamp):=20=E4=BC=98=E5=8C=96=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E8=BD=AC=E6=97=B6=E9=97=B4=E6=88=B3=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=97=B6=E5=8C=BA=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除调试日志,增强 `convertDateToTimestamp` 函数的健壮性: - 支持输入 Date 对象和字符串 - 增加对时区的支持,通过计算目标时区偏移量得到正确时间戳 - 添加错误捕获与返回明确的错误信息 - 提取获取时区偏移量逻辑为独立函数 `getTimeZoneOffset` --- sidepanel/modules/eventHandlers.js | 2 -- sidepanel/utils/timestampUtils.js | 49 +++++++++++++++++++++++++----- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/sidepanel/modules/eventHandlers.js b/sidepanel/modules/eventHandlers.js index dde6bb2..eed1038 100644 --- a/sidepanel/modules/eventHandlers.js +++ b/sidepanel/modules/eventHandlers.js @@ -163,8 +163,6 @@ export function handleConvertDateToTimestamp() { // 转换为时间戳 const timestamp = convertDateToTimestamp(date, selectedTimezone); - console.log('转换后的时间戳:', timestamp); - if (isNaN(timestamp)) { dateInputResult.value = '无效的日期字符串'; dateInputResult.style.borderColor = '#dc3545'; diff --git a/sidepanel/utils/timestampUtils.js b/sidepanel/utils/timestampUtils.js index 6d43927..1643f6d 100644 --- a/sidepanel/utils/timestampUtils.js +++ b/sidepanel/utils/timestampUtils.js @@ -64,7 +64,7 @@ export function convertTimestampToDate( /** * 转换日期格式为时间戳 - * @param {string} date - 输入的日期字符串 + * @param {string|Date} date - 输入的日期字符串或Date对象 * @param {string} timeZone - 时区,默认为本地时区 * @returns {number|string} 时间戳或错误信息 */ @@ -72,10 +72,45 @@ export function convertDateToTimestamp( date, timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone ) { - return new Date( - Intl.DateTimeFormat('en-US', { - timeZone: timeZone, - hour12: false, - }).format(date) - ).getTime(); + try { + // 创建日期对象 + const dateObj = new Date(date); + + // 检查日期是否有效 + if (isNaN(dateObj.getTime())) { + return '无效的日期'; + } + + // 如果提供了时区,则需要特殊处理 + if (timeZone) { + // 获取给定时区相对于UTC的时间差(毫秒) + const utc = dateObj.getTime() + dateObj.getTimezoneOffset() * 60000; + + // 计算目标时区相对于UTC的偏移量 + const targetOffset = getTimeZoneOffset(timeZone); + + // 返回目标时区对应的时间戳 + const targetTimestamp = utc + targetOffset; + return targetTimestamp; + } else { + // 没有时区参数,直接返回时间戳 + const timestamp = dateObj.getTime(); + console.log('timestamp: ', timestamp); + return timestamp; + } + } catch (error) { + return '日期转换错误: ' + error.message; + } +} + +/** + * 获取指定时区相对于UTC的偏移量(毫秒) + * @param {string} timeZone - 时区名称 + * @returns {number} 偏移量(毫秒) + */ +function getTimeZoneOffset(timeZone) { + const now = new Date(); + const utc = new Date(now.toLocaleString('en-US', { timeZone: 'UTC' })); + const target = new Date(now.toLocaleString('en-US', { timeZone: timeZone })); + return target.getTime() - utc.getTime(); }