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

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

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

下面就直接贴代码了

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

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

  1. //展示
  2. function generation( $token,$date )
  3. {
  4. $uesr = $this->usercache( $token );
  5.  
  6. $arr = [] ;
  7. foreach ($this->get_weekinfo($date) as $k => $v)
  8. {
  9.  
  10. //连接上个月的数据去掉
  11. if( date("m",strtotime($v[0])) == date("m",strtotime($date)) )
  12. {
  13. $arr[] = $v;
  14. }
  15. }
  16.  
  17. //月份的最后一天
  18. $lastday = date('Y-m-d', mktime(23, 59, 59, date('m', strtotime($date))+1, 00));
  19.  
  20. $lastweek = end($arr);
  21.  
  22. //不够下个月的数据补上
  23. if( strtotime($lastday) > strtotime($lastweek[1]) )
  24. {
  25. $newendarr = array( date( 'Y-m-d',strtotime($lastweek[1])+86400 ),date( 'Y-m-d',strtotime($lastweek[1])+(86400*7) ) );
  26. array_push($arr, $newendarr);
  27. }
  28.  
  29. try{
  30.  
  31. //数据插入
  32. foreach ($arr as $ke => $va)
  33. {
  34.  
  35. $data['week'] = $ke+1; //第几周
  36. $data['uid'] = $uesr['uid']; //用户ID
  37. $data['year'] = date('Y',strtotime($date)); //年
  38. $data['month'] = date('m',strtotime($date));//月
  39.  
  40. //每个星期的开始-结束数据填充
  41. $i = strtotime($va[0]);
  42. while ( $i <= strtotime($va[1]) ) {
  43. $data['date'] = date('Y-m-d',$i); //年月日
  44. $data['day'] = $this->getTimeWeek( $i );//星期几
  45.  
  46. //添加
  47. $this->insertData( $data );
  48. $i = $i+86400;
  49. }
  50. }
  51. return true;
  52. } catch (\Exception $e) {
  53. return false;
  54. }
  55. }
  56. //获取星期参数
  57. function getTimeWeek($time)
  58. {
  59. $day = date("w",$time);
  60. return ($day == 0) ? '7' : $day ;
  61. }

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

PHP计算每月几周,每周的开始结束日期的更多相关文章

  1. PHP获取一年有多少周和每周开始和结束日期

    /*PHP获取当前日期是第几周和本周开始日期和本周结束日期*/ //$now = '2018-11-13';周二 public function getNowTimeInfo($now) { $str ...

  2. mysql 某周的起始和结束日期

    转自:http://bbs.csdn.net/topics/370096126 t_table有数据如下:year    Week2011    22011    32011    42011     ...

  3. PHP计算一年有多少周,每周开始日期和结束日期

    一年有多个周,每周的开始日期和结束日期 参考代码一:[正在使用的版本] <?php header("Content-type:text/html;charset=utf-8" ...

  4. PHP获取一年有几周以及每周开始日期和结束日期

    最近接了一个项目,其中有一需求是用php获取一年有几周以及每周开始日期和接触日期.在网上找些资料没有合适的,于是自己做了一份,下面通过两种方式实现PHP获取一年有几周以及每周开始日期和结束日期 代码一 ...

  5. php 计算出一年中每周的周一日期

    最近接到一个任务,归纳起来,就是:要算出每年当中,每周的周一日期.想了一会,看了下date函数,深入了解了一下date函数各个参数的含义之后,终于把这道题做出来了! 在date()函数中,有一个参数对 ...

  6. PHP获取某年第几周的开始日期和结束日期

    http://blog.csdn.net/qq_27080247/article/details/50835956 /** * 获取某年第几周的开始日期和结束日期 * @param int $year ...

  7. php获取一年中某一周的开始和结束时间

    PHP来获取一年中的每星期的开始日期和结束日期的代码 函数get_week()通过传入参数$year年份,获取当年第一天和最后一天所在的周数,计算第一周的日期,通过循环获取每一周的第一天和最后一天的日 ...

  8. PHP 获取某年第几周的开始日期和结束日期的实例

    /** * 获取某年第几周的开始日期和结束日期 * @param int $year * @param int $week 第几周; */ public function weekday($year, ...

  9. PHP获取日期对应星期、一周日期、星期开始与结束日期的方法

    本文实例讲述了PHP获取日期对应星期.一周日期.星期开始与结束日期的方法.分享给大家供大家参考,具体如下: /* * 获取日期对应的星期 * 参数$date为输入的日期数据,格式如:2018-6-22 ...

随机推荐

  1. angular input框点击别处 变成不可输入状态

    <input type="text" ng-model="edit" ng-disabled="!editable" focus-me ...

  2. .net core 文件下载

    public IActionResult Dowanload(string id,int numTypes) { try { var memory = new MemoryStream(): //mo ...

  3. 字符串编辑距离(Edit Distance)

    一.问题描述定义字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein 在 1965 年提出的概念,又称 Levenshtein 距离,是指两个字符串之 ...

  4. SuperSocket获取所有连接上的 Session

    你也可以从 AppServer 实例获取所有连接上的 session 然后推送数据到所有客户端: foreach(var session in appServer.GetAllSessions()) ...

  5. 阿里云ECS服务器活动99元一年,最高可买三年

    这几天阿里云 99一年.279三年的服务器活动如火如荼,和之前腾讯三年的服务器非常类似,非常低的价格换取非常高的价值,当然,通常情况下便宜没好货的,想要玩一下的老铁可以进阿里云去看看,阿里云270三年 ...

  6. Python--day21--复习

    序列化模块总结: jison格式化输出: Serialize obj to a JSON formatted str.(字符串表示的json对象) Skipkeys:默认值是False,如果dict的 ...

  7. HDU 1698 Just a Hook 线段树区间更新、

    来谈谈自己对延迟标记(lazy标记)的理解吧. lazy标记的主要作用是尽可能的降低时间复杂度. 这样说吧. 如果你不用lazy标记,那么你对于一个区间更新的话是要对其所有的子区间都更新一次,但如果用 ...

  8. MATLAB常用函数, 常见问题

    MATLAB常用函数 1.常用取整函数 round(x):四舍五入函数 floor(x) : 向下取整, 即 floor(1.2)=1,  floor(1.8) = 1 ceil(x) : 向上取整, ...

  9. [转]SpringBoot整合Swagger2以及生产环境的安全问题处理

    1.创建springboot项目 https://www.cnblogs.com/i-tao/p/8878562.html 这里我们使用多环境配置: application-dev.yml(开发环境) ...

  10. Vue的路由Router之导航钩子和元数据及匹配

    一.文件结构 二.vue.js 打开此链接 https://cdn.bootcss.com/vue/2.6.10/vue.js 复制粘贴页面的所有内容 三.vue-router.js 打开此链接  h ...