我尝试通过执行moment().year(...).isoWeek(...).startOf('isoWeek')
但是,似乎该函数并非总是返回正确的日期。 例如,当我住在英格兰时,一周总是从星期一开始。 当我们要求2019年第1周的第一天时,我们应该在2018年12月31日结束。
在2018年12月31日不是这种情况,因为我收到的结果是在2019年12月30日作为2019年第1周的开始日期。请参见example
答案 0 :(得分:1)
我想我找到了我想要的解决方案
moment()
.isoWeekYear(year)
.isoWeek(week)
.startOf('week')
答案 1 :(得分:0)
请注意,如文档的i18n部分所述:
默认情况下,Moment.js随附英语(美国)语言环境字符串。如果需要其他语言环境,可以将它们加载到Moment.js中以供以后使用。
因此,如果要使用en-gb
语言环境,则必须显式加载它(在浏览器中,可以使用en-gb.js
文件或moment-with-locales.js
,然后使用moment.locale('en-gb')
设置语言环境)。
您不必使用year()
设置器,因为它将年份设置为2019
,并且moment().year(2019).isoWeek(1)
会为您提供 2020
< / strong>。您可以改用moment({y: year})
创建给定年份的时刻对象。
如果要获得与语言环境相关的结果,则必须使用week()
而不是isoWeek
:
由于不同的语言环境对一年中的星期编号不同,因此Moment.js添加了
moment#week
以获取/设置一年中的本地化星期。一年中的哪一周取决于哪一天是一周中的第一天(星期日,星期一等),以及哪一周是一年中的第一周。
这里有完整的代码示例:
// Set locale to British English
moment.locale('en-gb');
var year = 2019;
var firstMonday = moment({y: year}) // get first day of the given year
.week(1) // get the first week according locale
.startOf('week'); // get the first day of the week according locale
// Show result
console.log(firstMonday.format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment-with-locales.min.js"></script>
您可以使用format()
显示时刻对象的值。