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