moment.locale 导致错误的年份



我已经在我的 nodejs 应用程序中使用 moment 2 年了,直到昨天 2022-01-01 它一直工作正常。 时刻开始给出错误的年份日期(在服务器生产和开发环境中)

这是我的代码

const moment = require('moment'); 
console.log(moment().locale('fr').year(2021).week(48).startOf('week').format());
// ouptut 2020-11-23T00:00:00+01:00
console.log(moment().year(2021).week(48).startOf('week').format());
// output 2021-11-21T00:00:00+01:00

这是我的开发环境:

nodejs v10.23.0
npm 6.14.8
package: "moment": "^2.29.1",

可以确认这看起来像一个错误。一些快速调查表明,它看起来与区域设置如何更改一周的开始有关,将2021的"第一周"放在2020然后倒带,我认为这里报告了该错误。

基本上这意味着你不能相信这种机制可以达到某个时间。

解决方法

使用已知良好的值.add;例如

moment('2021-01-01').locale('fr').add(7 * 48, 'days').startOf('week').format();
// => '2021-11-29T00:00:00+00:00'

请注意,由于"一周开始"不同,这仍然可能与其他区域设置周行为不同,在世界大部分地区,一周从"星期一"开始,但在某些地方(例如美国),星期日是一周的第一天

moment('2021-01-01').add(7 * 48, 'days').startOf('week').format();
// => '2021-11-28T00:00:00+00:00' (USA-style default behaviour)

一致性

如果您根本不希望此行为在区域设置中发生变化,而不是使用"一周的开始",则需要专门选择日期,即1 = Monday

const usa = moment('2021-01-01').add(7 * 48, 'days').day(1).format();
const fr = moment('2021-01-01').locale('fr').add(7 * 48, 'days').day(1).format();
usa === fr; // true, both 29th of November

相关内容

最新更新