get_week

mail@pastecode.io avatar
unknown
plain_text
2 years ago
1.7 kB
2
Indexable
   public function get_week($date){
        // public const SUNDAY = 0;
        //    public const MONDAY = 1;
        //    public const TUESDAY = 2;
        //    public const WEDNESDAY = 3;
        //    public const THURSDAY = 4;
        //    public const FRIDAY = 5;
        //    public const SATURDAY = 6;

        $weekday=Carbon::parse($date)->weekday();
        $week_value=[
            Carbon::SUNDAY=>1,
            Carbon::MONDAY => 2,
            Carbon::TUESDAY => 3,
            Carbon::WEDNESDAY => 4,
            Carbon::THURSDAY => 5,
            Carbon::FRIDAY => 6,
            Carbon::SATURDAY => 0,
        ];

        var_dump('weekday='.$weekday);
        $startOfWeek=Carbon::parse($date)->subDays($week_value[$weekday]);
        $startOfWeekY=Carbon::parse($date)->subDays($week_value[$weekday])->startOfYear();

        $endOfWeek=Carbon::parse($date)->addDays(6-$week_value[$weekday]);
        $endOfWeekY=Carbon::parse($date)->addDays(6-$week_value[$weekday])->startOfYear();

        $new_date=Carbon::parse($date)->addDays(6-$week_value[$weekday]);

        $days1=$startOfWeekY->startOfYear()->diffInDays(Carbon::parse($new_date));
        $days2=$endOfWeekY->startOfYear()->diffInDays(Carbon::parse($new_date));

        $week1=(int)round(($days1/7),0);
        $week2=(int)round(($days2/7),0);
        if($week1>$week2){
            if($week1==53 && ($days1-365)>=4)$week=1;
            else $week=$week1;
        }
        else if($week2>$week1){
            if($week2==53 && ($days2-365)>=4)$week=1;
            else $week=$week2;
        }
        else $week=$week1;

        return['week'=>$week,'startOfWeek'=>$startOfWeek,'endOfWeek'=>$endOfWeek];

    }