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”(与{{1}提供的结果不匹配}):
dateFns#startOfWeek
但是,如果我格式化原始日期(2015-01-01),它将返回“ 1”:
❯❯❯ dateFns.format(new Date('2014-12-28'), 'W')
"52"
为什么会有这种差异?获取正确的“星期几”日期和星期数的正确方法是什么?
请注意,在Node.js CLI上运行上述命令时,我正在环境变量中设置❯❯❯ dateFns.format(new Date('2015-01-01'), 'W')
"1"
。因此,这不应该是时区问题。
答案 0 :(得分:1)
您得到的是正确的。默认情况下,一周从星期日开始。但是,如果您想从星期一开始,可以这样做:
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周。