Node环境中使用@js-joda/core时区操作报错的解决方法
问题:Node环境下@js-joda/core使用ZoneId报错
我在Node环境中使用@js-joda/core编写了以下代码片段:
LocalDateTime.parse(row.date + "T" + row.time) .atZone(ZoneId.of("America/Los_Angeles")) .toInstant() .toEpochMilli()
运行时抛出错误:
ERROR: unsupported ZoneId:America/Los_Angeles { "stack": "Error\n at getRules (/Users/kevin/project/node_modules/@js-joda/core/dist/js-joda.js:4395:15)\n at ofId (/Users/kevin/project/node_modules/@js-joda/core/dist/js-joda.js:4406:39)\n at of (/Users/kevin/project/node_modules/@js-joda/core/dist/js-joda.js:10262:27)\n at <anonymous> (/Users/kevin/project/app/app/scripts/create-tags.ts:119:30)\n at <anonymous> (/Users/kevin/project/app/app/scripts/create-tags.ts:79:25)\n at map (native)\n at <anonymous> (/Users/kevin/project/app/app/scripts/create-tags.ts:79:14)\n at processTicksAndRejections (native)", "message": "unsupported ZoneId:America/Los_Angeles" }
这段代码在js-joda官网的浏览器控制台能正常运行,请问Node环境下需要做哪些配置才能正常工作?
解决方法
- 安装时区数据依赖:
@js-joda/core本身不包含完整的时区规则数据,需额外安装@js-joda/timezone包,执行命令:npm install @js-joda/timezone --save - 导入时区数据:在使用
ZoneId的代码文件顶部,添加时区数据的导入语句:- ES模块环境:
import '@js-joda/timezone/dist/js-joda-timezone'; - CommonJS环境:
require('@js-joda/timezone/dist/js-joda-timezone');
- ES模块环境:
- 重新运行代码:此时
ZoneId.of("America/Los_Angeles")可正常识别时区规则,不会再抛出unsupported ZoneId错误。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

