如何根据Moment.js中的星期数和年份获取星期的第一天?

时间:2019-01-02 14:07:31

标签: momentjs

我尝试通过执行moment().year(...).isoWeek(...).startOf('isoWeek')

从星期数和年份中获取Moment.js中特定星期的开始日期。

但是,似乎该函数并非总是返回正确的日期。 例如,当我住在英格兰时,一周总是从星期一开始。 当我们要求2019年第1周的第一天时,我们应该在2018年12月31日结束。

在2018年12月31日不是这种情况,因为我收到的结果是在2019年12月30日作为2019年第1周的开始日期。请参见example

2 个答案:

答案 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()显示时刻对象的值。