Node.js时区偏移异常求助:已取消夏令时但偏移值不符
Node.js时区偏移错误(已取消夏令时地区)的解决办法
问题根源
Node.js 内置的ICU(International Components for Unicode)库包含时区规则数据库,若你的地区近期取消了夏令时,旧版本Node.js(如16.16.0)的时区数据未同步更新,导致计算出错误的时区偏移值。而浏览器依赖系统自带的时区数据,所以能正常显示。
解决办法
1. 升级Node.js版本
优先升级到Node.js 16.x的最新维护版本(16.20.0及以上),或直接切换到更高的LTS版本(如18.x、20.x)。这些版本的ICU数据库已更新了最新的时区规则,能直接解决问题。
- 若使用nvm管理版本,执行以下命令:
# 升级到16.x最新LTS nvm install 16 --lts # 或切换到18.x LTS nvm install 18 --lts - 也可直接从Node.js官网下载对应版本安装包。
2. 临时修复:使用系统ICU数据
若暂时无法升级,可在启动Node.js时添加--use-system-icu参数,让Node.js调用系统自带的时区数据库(和浏览器一致):
node --use-system-icu your-script.js
执行后,getTimezoneOffset()会返回正确的-210,toLocaleString()也会输出正确时间。
3. 验证修复效果
运行以下代码确认结果:
const d = new Date() console.log(d.getTimezoneOffset()) // 预期输出: -210 console.log(d.toLocaleString()) // 预期输出: '6/18/2023, 11:21:26 AM'
注意事项
Node.js 16.x已于2023年9月结束主动维护,不再接收功能更新和安全补丁,建议尽快迁移到受支持的LTS版本,避免后续出现类似兼容性问题。
内容的提问来源于stack exchange,提问作者erfan shafiee
相关产品推荐
相关产品推荐

