获取周次
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