一年的最后一周和 1 月 1 日使用 Carbon?

Last week of year and 1st January with Carbon?

我正在做一个项目,我需要按以下格式设置日期:YYYYWW 其中 WW 是一年中的周数,例如:今天是 202131.

有几种方法可以做到这一点,我可以直接使用 isoFormat('YYYYWW'),或者我可以获取 weekOfYear 属性并将其附加到当前年份。

然而,这两种方法都会在以下日期中断:01-01-2021,实际上,1 月 1 日设置在 2020 年的最后一周,但年份是 2021 年。两种方法都给出:202153而正确的结果应该是 202053 .

我目前有一个变通方法,检查月份是否小于 3 周是否大于 50,然后出现问题,我将年份减 1。

public static function formatTestWeek($d)
{
    $current = Carbon::parse($d);
    $currentWeek = $current->weekOfYear;
    $currentYear = $current->year;
    if($currentWeek > 50 && $current->month < 3){
        $currentYear -= 1;
    }
    $formattedDate = strval($currentYear) . $current->isoFormat("WW");
    return $formattedDate;
}

Carbon 中是否有更优雅的方法来获得适用于所有情况的 YYYYWW 格式?

YYYY是年份

GGGG 是 ISO 周-年

gggg 是当前语言环境设置后的周-年 (first_day_of_week + day_of_first_week_of_year)

所以你需要->isoFormat('GGGGWW')

isoFormat() 中可用代码的完整列表在文档中: https://carbon.nesbot.com/docs/#iso-format-available-replacements