date-fns startOfWeek 和格式 W 之间的差异
Discrepancy between date-fns startOfWeek and format W
我对 date-fns
及其处理 "start of weeks" 的方式有疑问。
根据我的日历,2015-01-01 的 "start of week" 是 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) 的结果格式化为 return 周数,我得到的是“52”(与结果不匹配由 dateFns#startOfWeek
提供):
❯❯❯ dateFns.format(new Date('2014-12-28'), 'W')
"52"
但是,如果我格式化原始日期 (2015-01-01),它将 return "1":
❯❯❯ dateFns.format(new Date('2015-01-01'), 'W')
"1"
为什么会出现这种差异?获得正确 "start of week" 日期和周数的正确方法是什么?
请注意,当我在我的 Node.js CLI 上 运行 上述命令时,我在我的环境变量中设置了 TZ=Etc/UTC
。所以这应该不是时区问题。
你得到的是正确的。默认情况下,一周从星期日开始。但是如果你想从星期一开始,你可以这样做:
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周
我不知道它是什么时候添加的,但您也可以在 2021 年使用 startOfISOWeek
而不是 startOfWeek
来获得 date-fns
。
startOfISOWeek
returns Monday
的日期而不是 Sunday
作为一周的开始。
我对 date-fns
及其处理 "start of weeks" 的方式有疑问。
根据我的日历,2015-01-01 的 "start of week" 是 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) 的结果格式化为 return 周数,我得到的是“52”(与结果不匹配由 dateFns#startOfWeek
提供):
❯❯❯ dateFns.format(new Date('2014-12-28'), 'W')
"52"
但是,如果我格式化原始日期 (2015-01-01),它将 return "1":
❯❯❯ dateFns.format(new Date('2015-01-01'), 'W')
"1"
为什么会出现这种差异?获得正确 "start of week" 日期和周数的正确方法是什么?
请注意,当我在我的 Node.js CLI 上 运行 上述命令时,我在我的环境变量中设置了 TZ=Etc/UTC
。所以这应该不是时区问题。
你得到的是正确的。默认情况下,一周从星期日开始。但是如果你想从星期一开始,你可以这样做:
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周
我不知道它是什么时候添加的,但您也可以在 2021 年使用 startOfISOWeek
而不是 startOfWeek
来获得 date-fns
。
startOfISOWeek
returns Monday
的日期而不是 Sunday
作为一周的开始。