PHP计算每月几周,每周的开始结束日期

因为项目中需要一个每周工作计算的功能,具体日期的算法是,把每月拆分成几个周,最后一个星期这个月份的天数不够就补上下个月的。

列如今天8月27星期一,这个月有31天,但是这个星期最后的一天是9月1号,所以要把9月1号加到8月份,然后9月的第一周就要重9月2号开始算,以此类推

下面就直接贴代码了

    //计算某一年某个月有几周
function get_weekinfo($month)
{
$weekinfo = array();//创建一个空数组
$end_date = date('d',strtotime($month.' +1 month -1 day'));//计算当前月有多少天
for ($i=1; $i <$end_date ; $i=$i+7) { //循环本月有多少周
$w = date('N',strtotime($month.'-'.$i)); //计算第一天是周几
$weekinfo[] = array(date('Y-m-d',strtotime($month.'-'.$i.' -'.($w-1).' days')),date('Y-m-d',strtotime($month.'-'.$i.' +'.(7-$w).' days')));
} //当周开始时间 //结束时间
return $weekinfo;
}

这是从网上找的代码 ,但是对3月份不管用,所以我在原来的基础上做了一下改动

    //展示
function generation( $token,$date )
{
$uesr = $this->usercache( $token ); $arr = [] ;
foreach ($this->get_weekinfo($date) as $k => $v)
{ //连接上个月的数据去掉
if( date("m",strtotime($v[0])) == date("m",strtotime($date)) )
{
$arr[] = $v;
}
} //月份的最后一天
$lastday = date('Y-m-d', mktime(23, 59, 59, date('m', strtotime($date))+1, 00)); $lastweek = end($arr); //不够下个月的数据补上
if( strtotime($lastday) > strtotime($lastweek[1]) )
{
$newendarr = array( date( 'Y-m-d',strtotime($lastweek[1])+86400 ),date( 'Y-m-d',strtotime($lastweek[1])+(86400*7) ) );
array_push($arr, $newendarr);
} try{ //数据插入
foreach ($arr as $ke => $va)
{ $data['week'] = $ke+1; //第几周
$data['uid'] = $uesr['uid']; //用户ID
$data['year'] = date('Y',strtotime($date)); //年
$data['month'] = date('m',strtotime($date));//月 //每个星期的开始-结束数据填充
$i = strtotime($va[0]);
while ( $i <= strtotime($va[1]) ) {
$data['date'] = date('Y-m-d',$i); //年月日
$data['day'] = $this->getTimeWeek( $i );//星期几 //添加
$this->insertData( $data );
$i = $i+86400;
}
}
return true;
} catch (\Exception $e) {
return false;
}
}
//获取星期参数
function getTimeWeek($time)
{
$day = date("w",$time);
return ($day == 0) ? '7' : $day ;
}

原理挺简单的,判断一个月的数据够不够  ,不够就补上数据 ,用起来也简单 , 直接输入 年月就好了, 如:2018-03

最新文章

  1. SharpMap简析
  2. 在一个XAML中点击按钮,界面跳转到另一个XAML界面方法
  3. 【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储)
  4. 白话CSS3的新特性
  5. 漫游Kafka设计篇之主从同步
  6. [iOS微博项目 - 1.3] - 内容对齐 TextAlignment &amp; VerticalAlignment &amp; HorizontalAlignment &amp; contentMode
  7. [转]http://www.russbishop.net/xcode-exception-breakpoints
  8. Java学习笔记之基于TCP协议的socket
  9. AWSS3异步等待上传成功返回结果
  10. html/jsp导出pdf格式的几种方法(jsPDF,iText,wkhtmltopdf)
  11. Problem 8: Largest product in a series
  12. Linux系统调用列表(转)
  13. Atitit phpstorm配置attilax总结
  14. iOS开发之--cocopods相关问题及解决方法
  15. MySQL 5.7 并行复制
  16. mysql引擎和事务
  17. 再谈 apache设置virtualhost + apache的一些相关设值
  18. [问题解决]RedHat7更换CentOS7的yum源时踩过的坑
  19. twisted reactor执行流程
  20. 2018面向对象程序设计(Java)第3周学习指导及要求

热门文章

  1. [C#] ServiceStack.Redis如何批量的pop数据?
  2. PHP 内存管理及垃圾回收机制
  3. 严重: Servlet.service() for servlet [jsp] threw exception java.lang.NullPointerException
  4. H3C PPP MP实现方式
  5. TensorFlow指定使用GPU 多块gpu
  6. laravel post提交数据时显示异常
  7. [转]Jquery属性选择器(同时匹配多个条件,与或非)(附样例)
  8. Python--day41--线程锁
  9. python的if判断
  10. el-tree文本内容过多显示不完全问题(解决)