PHP计算某时间段内有几个周及某时间为今年第几周函数

php 复制代码
date_default_timezone_set('PRC');
function count_weeks($startDate, $endDate = ''){
  //开始时间
  $startDate = date('Y-m-d', $startDate);
  //结束时间
  if(empty($endDate)) {
    $endDate = date('Y-m-d');
  }else{
    $endDate = date('Y-m-d', $endDate);
  }
  //跨越天数
  $n = (strtotime($endDate)-strtotime($startDate))/86400;
  //判断,跨度小于7天,可能是同一周,也可能是两周
  $endDate = date("Y-m-d",strtotime("$endDate +1 day"));
  if($n<7){
      //查开始时间 在 那周 的 位置
      $day            = date("w",strtotime($startDate))-1;
      //查开始时间  那周 的 周一
      $week_start        = date("Y-m-d",strtotime("$startDate -{$day} day"));
      //查开始时间  那周 的 周末
      $day            = 7-$day;
      $week_end        = date("Y-m-d",strtotime("$startDate +{$day} day"));
      //判断周末时间是否大于时间段的结束时间,如果大于,那就是时间段在同一周,否则时间段跨两周
      if($week_end>=$endDate){        
          $weekList[] =array('s'=>$startDate, 'e'=>date("Y-m-d",strtotime("$endDate -1 day")));
      }else{
          $weekList[] =array('s'=>$startDate, 'e'=>date("Y-m-d",strtotime("$week_end -1 day")));        
          $weekList[] =array('s'=>$week_end, 'e'=>date("Y-m-d",strtotime("$endDate -1 day")));    
      }
  }else{
      //如果跨度大于等于7天,可能是刚好1周或跨2周或跨N周,先找出开始时间 在 那周 的 位置和那周的周末时间
      $day         = date("w",strtotime($startDate))-1;
      $week_start  = date("Y-m-d",strtotime("$startDate -{$day} day"));
      $day         = 7-$day;
      $week_end    = date("Y-m-d",strtotime("$startDate +{$day} day"));
      //先把开始时间那周写入数组
      $weekList[]  =array('s'=>$startDate, 'e'=>date("Y-m-d",strtotime("$week_end -1 day"))); 
      //判断周末是否大于等于结束时间,不管大于(2周)还是等于(1周),结束时间都是时间段的结束时间。
      if($week_end >= $endDate){
          $weekList[] = array('s'=>$week_end, 'e'=>date("Y-m-d",strtotime("$endDate -1 day")));
      }else{
         //N周的情况用while循环一下,然后写入数组
          while($week_end <= $endDate){
              $start         = $week_end;
              $week_end    = date("Y-m-d",strtotime("$week_end +7 day"));
              if($week_end <= $endDate){
                  $weekList[]  = array('s'=>$start, 'e'=>date("Y-m-d",strtotime("$week_end -1 day")));
              }else{
                  $weekList[]  = array('s'=>$start, 'e'=>date("Y-m-d",strtotime("$endDate -1 day")));
              }
          }
      }
  }
  return $weekList;
}
相关推荐
1379号监听员_4 分钟前
嵌入式软件架构--按键消息队列3(测试)
开发语言·stm32·单片机·嵌入式硬件·架构
阿登林15 分钟前
C# iText7与iTextSharp导出PDF对比
开发语言·pdf·c#
qq_4335545427 分钟前
C++ 双向循环链表
开发语言·c++·链表
一只侯子34 分钟前
Tuning——CC调试(适用高通)
开发语言·图像处理·笔记·学习·算法
丁浩66636 分钟前
Python机器学习---1.数据类型和算法:线性回归
开发语言·python·机器学习·线性回归
那年窗外下的雪.42 分钟前
鸿蒙ArkUI布局与样式进阶(十二)——自定义TabBar + class类机制全解析(含手机商城底部导航案例)
开发语言·前端·javascript·华为·智能手机·harmonyos·arkui
马拉萨的春天1 小时前
探索Objective-C中的对象复制:深入理解copy和mutableCopy
开发语言·ios·objective-c
啊森要自信1 小时前
【MySQL 数据库】使用C语言操作MySQL
linux·c语言·开发语言·数据库·mysql
千码君20161 小时前
Go语言:对其语法的一些见解
开发语言·后端·golang
mjhcsp2 小时前
C++ char 类型深度解析:字符与字节的双重身份
开发语言·c++·char