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

标签 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)

如果我格式化 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})

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>

关于周数,format() 中的 W为您提供 ISO 周数,这意味着它从星期一开始。而且2014年只有52周。

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

关于javascript - date-fns startOfWeek 和格式 W 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55241424/

相关文章:

javascript - 日期 fns 的 isSameOrBefore 实现

javascript - 如何自定义date-fns的formatRelative?

javascript - 如何更改 ng-view

php - 使用 PHP 更改查询的日期

javascript - 用 date-fns 替换时刻数据

javascript - 获取周数但每周五更改为下一周的脚本

javascript - 使用 momentjs 计算给定日期范围内的天数(以月、天为单位)

javascript - onclick 事件在 Internet Explorer 中不起作用

java - 如何在 JavaScript 中访问在 AJAX 请求中作为响应发送的自定义 Java 对象?

javascript - 为什么将样式放入 if 语句中不起作用?