关注前端开发
HTML5、CSS3、Javascript

php按指定日期范围获取周次,周次时间范围(支持跨年)

获取周次

function getWeekNoToFirstDay($time){

    $iFirstWeekDay = date('w',strtotime(date("Y",$time).'-01-01'));


    if($iFirstWeekDay != 1){//指定年的1月1号不是星期一
        if($iFirstWeekDay == 0){//星期天

            if(date("Y-m-d",$time)==date("Y",$time).'-01-01'){
                //如果1号为周日,并且获取传入的日期也是 1号。

                $iFirstWeekDay = 7;

                $sWeekNo = strftime("%W",strtotime(date("Y-m-d",$time)));

            }else{

                $iFirstWeekDay = 7;

                $sWeekNo= strftime("%W",strtotime(date("Y-m-d",$time)))+1;

            }


        }else{

            $sWeekNo = strftime("%W",strtotime(date("Y-m-d",$time)))+1;

        }

        $iAdjustDay = (8 - $iFirstWeekDay)+($sWeekNo-1)*7;

        if($iAdjustDay<7){

            $iFirstWeekDay = $iFirstWeekDay-2;
            $dateFirstFullWeekBeginDate = strtotime("-{$iFirstWeekDay} day",strtotime((date("Y",$time)-1).'-12-31'));
        }else{

            $iAdjustDay = (8 - $iFirstWeekDay)+($sWeekNo-2)*7;
            $dateFirstFullWeekBeginDate = strtotime("+{$iAdjustDay} day",strtotime(date("Y",$time).'-01-01'));

        }

    }else{


        if(date("Y-m-d",$time)==date("Y",$time).'-01-01'){
            //如果1号为周日,并且获取传入的日期也是 1号。

            $sWeekNo = strftime("%W",strtotime(date("Y-m-d",$time)));

        }else{

            $sWeekNo= strftime("%W",strtotime(date("Y-m-d",$time)))+1;

        }


        $iAdjustDay = ($sWeekNo-1)*7;
        $dateFirstFullWeekBeginDate = strtotime("+{$iAdjustDay} day",strtotime(date("Y",$time).'-01-01'));
    }
    return $dateFirstFullWeekBeginDate;
}

 

获取周次范围:

function getWeekNoToDateRange($time,$is_timestamp=false){

    $dateTemp=getWeekNoToFirstDay($time);

    if($is_timestamp){

        $sDateRange['start_week_day'] = $dateTemp;
        $sDateRange['end_week_day'] = strtotime("+7 day",$dateTemp);

    }else{

        $sDateRange['start_week_day'] = date('Y-m-d H:i:s',$dateTemp);
        $sDateRange['end_week_day'] = date('Y-m-d H:i:s',strtotime("+7 day",$dateTemp));

    }

    return $sDateRange;
}

 

获取指定日期范围一共有多少周

function getWeekNoToTotalWeeks($start_time,$end_time){

    if(!$start_time or !$end_time ){

        return null;
    }
    $time_from_yearweek=getWeekNoToFirstDay($start_time);
    $time_end_yearweek=getWeekNoToFirstDay($end_time);

    $total_weeks=($time_end_yearweek-$time_from_yearweek)/86400/7;
    if($total_weeks >= 0){
        $total_weeks++;
    }
    return $total_weeks;
}

 

使用:

时间:2023-01-01 00:00:00  周日

print_r(getWeekNoToDateRange(1672502400));

Array ( [start_week_day] => 2022-12-26 00:00:00 [end_week_day] => 2023-01-02 00:00:00 )

时间:2023-01-02 00:00:00 周一

print_r(getWeekNoToDateRange(1672588800));

Array ( [start_week_day] => 2023-01-02 00:00:00 [end_week_day] => 2023-01-09 00:00:00 )

取时间:2022-12-31 00:00:00

print_r(getWeekNoToDateRange(1672416000));

Array ( [start_week_day] => 2022-12-26 00:00:00 [end_week_day] => 2023-01-02 00:00:00 )

 

 

 

欢迎指正!

参考:https://blog.csdn.net/lanyd/article/details/6232171

转载请注明出处:有点迷惘|技术blog » php按指定日期范围获取周次,周次时间范围(支持跨年)

相关推荐

  • 暂无文章