按周数设置 ISODate() 给出了一年中第一周的错误月份

setISODate() by week number is giving incorrect month for the first week of the year

当我像这样按一年中的周数设置日期时:

$date = Carbon::now();   
$date->setISODate(2020,1);

然后我得到 $date->month 为 12,而期望得到 1。

这是正确的行为吗?为什么在 weekOfYear 1 的情况下,月份是 12?我可以按周数设置日期并获得第 1 个月吗?

您对日历周的概念感到困惑。正式的一年的第一周是包含该年第一个星期四的一周。这意味着 2020 年的第 1 周在 2019-12-30 和 2020-01-05 之间。

如果你想得到第一周的月数,你不能看一周的第一天,但​​你必须看那个星期的星期四 .

$date = Carbon::now();
$date->setISODate(2020, 1, 4); // 4 is Thursday
echo $date->month; // month will be 1 for every year.

这将为您提供 2020 年第一周的星期四,该星期四已经在 2020-01 年,因此月份为 1。