计算两个时间段之间有多少周,并列出每周的第一天和最后一天时间
2019-08-05——2020-01-12周次
image.png
<?php
header("content-type:text/html;charset=utf-8"); //设置编码
error_reporting(0); //关闭错误报告
/*
* 根据起始和结束时间,计算之间有多少周
* 以起始时间开始,七天为一周,与日期是星期几无关
* $start_time 起始时间 2019-09-01
* $end_time 结束时间 2020-01-18
*
*/
function week($start_time,$end_time){
//开始的时间戳值
$start = strtotime($start_time);
//结束的时间戳值
$end = strtotime($end_time.' 23:59:59') + 1 ;
//两者之间有多少天
//这个算法是不准确的,如 2019-09-01——2019-10-26之间是56天,而2019-09-01——2019-10-27之间是:57.041666666667
$total_day = ($end - $start)/(24*3600);
//两者中间有多少周
$total_week = ceil($total_day/7);
$data = [];
//知道有多少周后,根据起始时间和当前周次,反推每周起始结束时间
for( $i=1;$i<=$total_week;$i++ ){
$week_name = '第'.$i.'周:';
//每周的开始时间:起始时间加上七天时间
$last_time = (7*($i-1))*(24*3600) + $start;
//第一周特别判断
if( $i == 1 ){
$first_day = date("Y-m-d",$start); //第一周的第一天用起始时间
$last_day = date("Y-m-d",$start+6*24*3600); //第一周的最后一天,是再第一周的时间上加6天
}elseif( $i == $total_week ){
//最后一周特别判断
$first_day = date("Y-m-d",$last_time); //最后一周的第一天
/*$next = strtotime($first_day);
if( $next > strtotime($end_time) ){
//如果最后一周的第一天比结束时间还大,就用结束时间作为第一天的时间
$first_day = date("Y-m-d",strtotime($end_time));
}*/
$last_day = date("Y-m-d",strtotime($end_time));
}else{
//中间周
$first_day = date("Y-m-d",$last_time);
$last_day = date("Y-m-d",$last_time+6*24*3600); //每周的结束时间:每周开始时间加6天
}
$time_name = $first_day.'——'.$last_day;
$data[$i] = $week_name.$time_name;
}
return $data;
}
//方法测试
$start_time = '2019-08-05'; //起始时间
$end_time = '2020-01-12'; //结束时间
$test = week($start_time,$end_time);
echo "<pre>";
print_r($test);
exit;