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

Node.js中RangeError: Invalid time zone specified问题解析与解决

Node.js中Date.toLocaleString使用+0000时区报错,但浏览器正常的原因与解决方法

测试代码

console.log("test");

const t = new Date().toLocaleString("en-US", {
  timeZone: "+0000"
});

console.log(t);

环境差异表现

这段代码在Google Chrome 122.0.6182.0(官方开发版,64位)控制台及MDN测试页面运行均正常,但在Node.js v21.2.0环境中执行时抛出如下错误:

test

/home/jdoodle.js:3
const t = new Date().toLocaleString("en-US", {
                     ^

RangeError: Invalid time zone specified: +0000
    at Date.toLocaleString (<anonymous>)
    at Object.<anonymous> (/home/jdoodle.js:3:22)
    at Module._compile (node:internal/modules/cjs/loader:1376:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Module._load (node:internal/modules/cjs/loader:1023:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12)
    at node:internal/main/run_main_module:28:49

Node.js v21.2.0

问题原因

浏览器与Node.js对timeZone参数的解析规则存在差异:

  • 浏览器的Intl实现(基于V8)为了兼容性或便利性,允许直接使用UTC偏移格式(如+0000、-0500)作为时区参数。
  • Node.js的Intl实现严格遵循ECMA-402标准,要求时区参数必须是IANA时区标识符(如UTC、America/New_York),不支持直接传入UTC偏移格式。

这种差异源于不同环境对标准实现细节的处理策略不同,Node.js保持了更严格的标准合规性,而浏览器放宽了限制以适配更多使用场景。

解决方法

方案1:使用标准IANA时区标识符

将+0000替换为UTC,这是所有环境都兼容的标准时区标识符:

console.log("test");

const t = new Date().toLocaleString("en-US", {
  timeZone: "UTC"
});

console.log(t);

方案2:处理动态偏移场景(如需)

如果需要处理非UTC的动态偏移,可选择两种方式:

  • 使用对应偏移的IANA时区(比如+0800对应Asia/Shanghai);
  • 借助第三方日期库(如date-fns、luxon),这类库对时区偏移格式的支持更一致,能跨环境稳定运行。

内容的提问来源于stack exchange,提问作者mat.twg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:17:35