博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP计算每月几周,每周的开始结束日期
阅读量:6979 次
发布时间:2019-06-27

本文共 2682 字,大约阅读时间需要 8 分钟。

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

 

转载于:https://www.cnblogs.com/liubaoqing/p/9540800.html

你可能感兴趣的文章
业务组件架构的思考
查看>>
自由程序员在国外
查看>>
OpenCV——使用ROI进行图像切割
查看>>
java 基础知识三 java变量
查看>>
java 基础知识八 正则表达式
查看>>
第五周作业
查看>>
C语言关闭日志文件时忘了将日志文件全局变量指针置为NULL
查看>>
matlab练习程序(高斯牛顿法最优化)
查看>>
【Python】keras卷积神经网络识别mnist
查看>>
DX11 preprocessor && Dynamic shader linkage
查看>>
手机网站的几点注意
查看>>
XSS跨站脚本攻击
查看>>
paramiko的使用
查看>>
tomcat的startup.bat闪退问题解决
查看>>
你不怕他离职吗?
查看>>
使用Linux进行缓冲区溢出实验的配置记录
查看>>
JavaScript-数据引用类型对象
查看>>
mysql删除开放用户权限
查看>>
17.08.17
查看>>
枚举算法
查看>>