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

如何在IE 11浏览器中获取当前时区?

解决IE11下获取浏览器时区的问题

别发愁,IE11对现代JS API的支持确实不太友好,咱们一步步来搞定这个问题:

为什么你的现有方案失效?

  • Intl.DateTimeFormat().resolvedOptions().timeZone:IE11完全不支持resolvedOptions()这个方法,所以直接调用肯定会报错。
  • moment.tz().zoneName():大概率是你没正确配置moment-timezone的时区数据,或者版本兼容性没匹配好导致的。

方案一:无需额外库,通过Date对象提取时区(适合轻量场景)

IE11的Date.toString()输出里会包含时区信息,咱们可以通过正则提取:

function getBrowserTimeZone() {
    // 优先适配现代浏览器
    if (typeof Intl !== 'undefined' && Intl.DateTimeFormat && typeof Intl.DateTimeFormat.prototype.resolvedOptions === 'function') {
        return Intl.DateTimeFormat().resolvedOptions().timeZone;
    }
    // IE11兼容逻辑
    const dateString = new Date().toString();
    // 匹配括号内的时区名称,比如"(中国标准时间)"
    const tzMatch = dateString.match(/\(([^)]+)\)/);
    if (tzMatch && tzMatch[1]) {
        return tzMatch[1];
    }
    // 如果名称提取失败,退而返回GMT偏移格式
    const offsetMinutes = new Date().getTimezoneOffset();
    const sign = offsetMinutes < 0 ? '+' : '-';
    const hours = Math.floor(Math.abs(offsetMinutes) / 60).toString().padStart(2, '0');
    const minutes = (Math.abs(offsetMinutes) % 60).toString().padStart(2, '0');
    return `GMT${sign}${hours}${minutes}`;
}

// 使用示例
console.log(getBrowserTimeZone());

⚠️ 注意:这个方法依赖Date.toString()的输出格式,不同语言环境下可能有差异,如果你的网站是多语言场景,可能需要额外适配。

方案二:正确使用moment-timezone(更可靠的方案)

如果你的项目已经在用moment,补全moment-timezone的配置就能解决问题:

  1. 确保引入兼容IE11的版本(比如moment@2.29.4、moment-timezone@0.5.43)
  2. 加载时区数据(可以直接引入包含时区数据的moment-timezone脚本,或者手动添加)
  3. 用moment.tz.guess()获取标准时区ID:
// 引入脚本后直接使用
const detectedTimeZone = moment.tz.guess();
console.log(detectedTimeZone); // 输出类似"Asia/Shanghai"

// 如果需要友好的时区名称
const timeZoneName = moment.tz(detectedTimeZone).format('z');
console.log(timeZoneName); // 输出类似"CST"

这个方法兼容性更强,还能拿到标准的IANA时区ID,适合需要精准时区处理的场景。

内容的提问来源于stack exchange,提问作者Shwetha Pichhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:19:36