Laravel->碳日期->根据日期设置月份星期数

时间:2020-03-04 11:10:51

标签: laravel

我正在尝试解决一个问题,我需要使用Laravel的Carbon Date插件基于会议日(即星期五)来映射“周数”

在当前月份(2020年3月),第一天是星期日。 但是,我不希望Carbon将其视为第1周,而将下周视为第2周。 我希望该应用查看一个月中有几个星期五,并将其视为一个月中有几个星期。

我正在控制器中使用它

    $date = Carbon::parse($request->get('rolldate'))->format('Y-m-d');
    $e = new Rollmapping();
    $e->roll_date = Carbon::parse($request->get('rolldate'));
    $e->roll_year = Carbon::parse($date)->year;
    $e->roll_month = Carbon::parse($date)->month;
    $e->roll_week = Carbon::parse($date)->weekNumberInMonth;
    $e->save();    

但是,如果我在3月6日创建一个Roll,我将得到2个roll_week,如果我想要1,因为这是第一个星期五,然后从那里继续,即第二周(第13个)将是第2周而不是第1周3

1 个答案:

答案 0 :(得分:0)

可能您必须使用weekOfMonth属性而不是weekNumberInMonth

weekNumberInMonth

weekNumberInMonth考虑从星期一到星期日的几周,因此,如果月份从星期日开始,则第1周将包含1天,如果从星期一开始,则最多包含7天。

weekOfMonth

weekOfMonth将在该月的前7天返回1,然后从8日到14日返回2,从15日到21日返回3,从22日到28日返回4,并在上面5日

echo \Carbon\Carbon::parse('first friday')->weekOfMonth;
> 1

echo \Carbon\Carbon::parse('first friday')->weekNumberInMonth;
> 2

此外,您还必须考虑每月的第一天是否在星期日至星期五之间:

var_dump(\Carbon\Carbon::parse('first day')->gt('first sunday') && \Carbon\Carbon::parse('first day')->lt('first friday'));
> false

如果是这样,则必须在weekOfMonth属性中添加1

希望这对您有帮助