我遇到了 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"
为什么会出现这种差异?获得正确的“一周开始”日期和周数的正确方法是什么?
注意,我正在设置 TZ=Etc/UTC
当我在 Node.js CLI 上运行上述命令时,在我的环境变量中。所以这不应该是时区问题。
最佳答案
您得到的是正确的。默认情况下,一周从星期日开始。但如果你想从周一开始,你可以这样做:
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);
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js"></script>
关于周数,format() 中的 W
为您提供 ISO 周数,这意味着它从星期一开始。而且2014年只有52周。
关于javascript - date-fns startOfWeek 和格式 W 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55241424/