From 142f6781e34579b87c7e5845a51514c875575e72 Mon Sep 17 00:00:00 2001 From: liaoxinyu Date: Mon, 3 Nov 2025 15:53:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=B6=E9=97=B4=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/class/date.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/utils/class/date.js b/utils/class/date.js index d563bf0..c09eafe 100644 --- a/utils/class/date.js +++ b/utils/class/date.js @@ -25,6 +25,8 @@ function time2Date(time, isOffset = false) { } else { // 传入一个时间戳 // 检测时间戳的长度,确保为ms + const dates = new Date(time); + const isInEDT = dateIsInEDT(dates); if (time.toString().length <= 10) { time = Number(time) * 1000; } @@ -34,7 +36,9 @@ function time2Date(time, isOffset = false) { timeN = getTimeZoneOffset(time); }else{ // 这也是对时差进行转换,不需要在每个处理时间格式的组件中修改isOffset为true - timeN = time-(-28800000)+(new Date(new Date().getTime()).getTimezoneOffset()* 60 * 1000); + // timeN = time-(-28800000)+(new Date(new Date().getTime()).getTimezoneOffset()* 60 * 1000); + // 这也是对时差进行转换,不需要在每个处理时间格式的组件中修改isOffset为true + timeN = isInEDT ? time - (-28800000)+(new Date(new Date().getTime()).getTimezoneOffset()* 60 * 1000) - 43200000 : time - (-28800000)+(new Date(new Date().getTime()).getTimezoneOffset()* 60 * 1000) - 46800000; } // 转化成日期时间对象 @@ -44,6 +48,17 @@ function time2Date(time, isOffset = false) { return date; } +// 判断日期是否在夏令时(简化的逻辑,实际应用中需要考虑更多的边界情况) +function dateIsInEDT(date) { + const year = date.getUTCFullYear(); + const start = new Date(Date.UTC(year, 2, 8, 18)); // March, 2nd Sunday + const end = new Date(Date.UTC(year, 10, 3, 18)); // November, 1st Sunday + start.setUTCDate(14 - start.getUTCDay()); + end.setUTCDate(7 - end.getUTCDay()); + + return date >= start && date < end; +} + /** * 将指定日期格式化输出,