PHP计算时间段内有几个周

如题所述

自己理了一下思路,因为我做的时候sql语句里用的是小于和大于,所以直接统计到下一天的0点。最后返回的是数组。
//开始时间
$startDate = "2013-12-12";
//结束时间
$endDate = "2013-12-16";
//跨越天数
$n = (strtotime($endDate)-strtotime($startDate))/86400;
//结束时间加一天(sql语句里用的是小于和大于,如果有等于的话这句可以不要)
$endDate = date("Y-m-d 00:00:00",strtotime("$endDate +1 day"));
//判断,跨度小于7天,可能是同一周,也可能是两周
if($n<7){
//查开始时间 在 那周 的 位置
$day = date("w",strtotime($startDate))-1;
//查开始时间 那周 的 周一
$week_start = date("Y-m-d 00:00:00",strtotime("$startDate -{$day} day"));
//查开始时间 那周 的 周末
$day = 7-$day;
$week_end = date("Y-m-d 00:00:00",strtotime("$startDate +{$day} day"));
//判断周末时间是否大于时间段的结束时间,如果大于,那就是时间段在同一周,否则时间段跨两周
if($week_end>=$endDate){
$weekList[] =array($startDate,$endDate);
}else{
$weekList[] =array($startDate,$week_end);
$weekList[] =array($week_end,$endDate);
}
}else{
//如果跨度大于等于7天,可能是刚好1周或跨2周或跨N周,先找出开始时间 在 那周 的 位置和那周的周末时间
$day = date("w",strtotime($startDate))-1;
$week_start = date("Y-m-d 00:00:00",strtotime("$startDate -{$day} day"));
$day = 7-$day;
$week_end = date("Y-m-d 00:00:00",strtotime("$startDate +{$day} day"));
//先把开始时间那周写入数组
$weekList[] =array($startDate,$week_end);
//判断周末是否大于等于结束时间,不管大于(2周)还是等于(1周),结束时间都是时间段的结束时间。
if($week_end >= $endDate){
$weekList[] = array($week_end,$endDate);
}else{
//N周的情况用while循环一下,然后写入数组
while($week_end <= $endDate){
$start = $week_end;
$week_end = date("Y-m-d 00:00:00",strtotime("$week_end +7 day"));
if($week_end <= $endDate){
$weekList[] = array($start,$week_end);
}else{
$weekList[] = array($start,$endDate);
}itjob
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-04-21
从开始时间算处于某年某月某周 再计算结束时间的周 然后在处理两个时间间隔
这个可以搜索PHP公式 网上有 不能简单的按照一周七天去算
把时间段满七天去除 看余数
起始为周一的加一周 否则加两周
第2个回答  2016-11-30
[php]0)? ? {? ?? ???$x = \'-\' . $x . \' day\';? ? } else if ($x < 0) {? ?? ???$x = \'+\' . -$x . \' day\';? ? }? ? return date(\'Ymd\', strtotime($x));}$day = \'20091023\';echo getDay(7,$day);[/php]
第3个回答  2020-10-22
以下代码适用于 weeks starting on Monday,可以得到一个时间段内,每周对应的时间

$start = 1569772800;
$end = 1602950400;
$spans = [];
for ($i=$start; $i <= $end; $i++) {
$key = date('Y', $i).date('W', $i);
$spans[$key][] = date('Y-m-d', $i);
$i += 86399;
}
print_r($spans);
相似回答