我正在做一个项目,我需要按以下格式格式化日期: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