date-fns startOfWeek 和格式 W 之间的差异

Fez*_*sta 1 javascript date date-fns

我遇到了问题date-fns以及它处理“几周开始”的方式。

根据我的日历,2015-01-01 的“一周开始”是 2014-12-29。

但是,另外date-fns#startOfWeek告诉我:

??? dateFns.startOfWeek(new Date('2015-01-01'))
Sun Dec 28 2014 00:00:00 GMT+0100 (Central European Standard Time)
Run Code Online (Sandbox Code Playgroud)

如果我将startOfWeek(2014-12-28)的结果格式化为只返回周数,我得到的是“52”(与提供的结果不匹配dateFns#startOfWeek):

??? dateFns.format(new Date('2014-12-28'), 'W')
"52"
Run Code Online (Sandbox Code Playgroud)

但是,如果我格式化原始日期(2015-01-01),它将返回“1”:

??? dateFns.format(new Date('2015-01-01'), 'W')
"1"
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种差异?获得正确的“一周开始”日期和周数的正确方法是什么?

请注意,TZ=Etc/UTC当我在 Node.js CLI 上运行上述命令时,我正在设置环境变量。所以应该不是时区问题。

小智 8

我不知道它是什么时候添加的,但在 2021 年你也可以使用forstartOfISOWeek来代替。startOfWeekdate-fns

startOfISOWeek返回日期Monday而不是Sunday一周的开始。


Pre*_*ola 6

你得到的是正确的。默认情况下,一周从星期日开始。但是如果你想从星期一开始,你可以这样做:

var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), {weekStartsOn: 1})

参考

例子:

var result = dateFns.startOfWeek(new Date('2015-01-01'))
console.log(result);

result = dateFns.startOfWeek(new Date('2015-01-01'), {weekStartsOn: 1})
console.log(result);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

关于周数,Wformat() 中为您提供 ISO 周数,这意味着它从星期一开始。此外,2014 年只有 52 周。

资料来源:https : //www.epochconverter.com/weeks/2014