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

问题描述 投票:0回答:1

我遇到了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)

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

❯❯❯ dateFns.format(new Date('2014-12-28'), 'W')
"52"

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

❯❯❯ dateFns.format(new Date('2015-01-01'), 'W')
"1"

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

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

javascript date date-fns
1个回答
1
投票

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

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

Reference

例:

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);
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js"></script>

关于周数,W中的format()给出了ISO周数,意味着从星期一开始。此外,2014年只有52周。

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

© www.soinside.com 2019 - 2024. All rights reserved.