You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中获取指定时区的夏令时偏移量

解决指定时区夏令时差值获取问题

原生JavaScript的Date对象依赖系统本地时区,所以要获取指定时区的夏令时(DST)差值,需要借助Intl.DateTimeFormat API解析目标时区的时间偏移信息,实现类似Java中zone.getDSTSavings()的功能。

修改后的实现代码

let date = new Date(1995, 11, 17);
console.log("当前日期", date);

function getDSTChange(date, timezone) {
    // 未指定时区时,保留原有系统本地时区逻辑
    if (!timezone) {
        const jan = new Date(date.getFullYear(), 0, 1).getTimezoneOffset();
        const july = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();
        let diff = Math.max(jan, july) - date.getTimezoneOffset();
        console.log("夏令时差值", diff);
        return diff;
    }

    // 指定时区的处理逻辑
    const year = date.getFullYear();
    // 创建目标时区的格式化器,用于提取时间偏移
    const getTimezoneOffset = (dt) => {
        const dateStr = dt.toLocaleString('en-US', { 
            timeZone: timezone, 
            timeZoneName: 'longOffset' 
        });
        const offsetMatch = dateStr.match(/([+-]\d{2}:\d{2})/);
        if (offsetMatch) {
            const [hours, mins] = offsetMatch[1].split(':').map(Number);
            // 转换为与Date.getTimezoneOffset一致的格式:本地时间 = UTC - 偏移量
            return -(hours * 60 + mins);
        }
        return 0;
    };

    // 取同一年中两个代表性日期:1月1日(通常非夏令时)、7月1日(通常夏令时,南半球逻辑自动适配)
    const janOffset = getTimezoneOffset(new Date(year, 0, 1));
    const julOffset = getTimezoneOffset(new Date(year, 6, 1));

    // 夏令时标准差值为两个偏移的绝对值差
    const dstSavings = Math.abs(janOffset - julOffset);

    console.log(`${timezone}的夏令时标准差值`, dstSavings);
    return dstSavings;
}

getDSTChange(date, 'Asia/Calcutta'); // 返回0
getDSTChange(date, 'Australia/Melbourne'); // 返回60

代码说明

  1. 指定时区适配:通过toLocaleString指定目标时区,提取带偏移的时间字符串,解析出时区偏移量。
  2. 偏移格式统一:将时区偏移(如+10:00)转换为与Date.getTimezoneOffset()一致的计算格式,保证逻辑统一。
  3. DST差值计算:对比同一年1月和7月的时区偏移,两者的绝对值差就是该时区的标准夏令时差值——加尔各答全年偏移无变化,差值为0;墨尔本夏令时比标准时间快60分钟,差值为60。
  4. 兼容性:Intl.DateTimeFormat是ES6标准API,现代浏览器、Node.js均支持。

内容的提问来源于stack exchange,提问作者Pavan Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:38:23