墨西哥永久取消夏令时后,JavaScript中RRule时区偏移异常解决
问题:RRule库生成日期范围时UTC时间偏移错误(墨西哥时区)
问题现象
使用RRule库生成指定时区的重复日期范围时,出现时间偏移不符合预期的问题:
- 配置参数:起始时间
2023-04-01 12:00:00,结束时间2023-04-04 18:00:00,时区设置为America/Mexico_City - 预期结果:每天生成的时间保持12:00-18:00(对应UTC的固定偏移)
- 实际结果:从4月2日起,生成的时间变为11:00-17:00
问题代码
return new RRule(removeUndefinedFromObject({ dtstart: utcToZonedTime(params.start, params.timezone), freq: RRule.DAILY, byweekday: params.weekdays.map((day) => weekdaysMap[day]), until: utcToZonedTime(params.end, params.timezone), tzid: params.timezone, }));
问题根源
墨西哥政府已于2022年10月永久取消夏令时,但旧版本的时区规则仍在生效,导致时区偏移计算错误。该问题并非RRule库独有,date-fns等其他日期处理库也存在类似情况。
解决方法
将Node.js版本从14.x升级到18.x后,问题得到解决。原因是Node.js 18.x更新了内置的时区数据库(tz database),包含了墨西哥取消夏令时的最新规则。
内容的提问来源于stack exchange,提问作者Osvaldo Cordova A
相关产品推荐
相关产品推荐

