一年的最后一周和 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
我正在做一个项目,我需要按以下格式设置日期: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