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

本文共 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

你可能感兴趣的文章
Dubbo之线程模型(Dispatcher属性、ThreadPool属性)。
查看>>
mybatis 注解使用
查看>>
1.3windows cmd批处理命令行下使用blat发邮件简洁模板
查看>>
Exchange 2010 迁移至Exchange 2013系列之八:测试ADMT迁移用户账户
查看>>
crontab命令的使用方法
查看>>
centos安装liberoffice及swftool的问题集
查看>>
java的zip压缩
查看>>
cocos2dx物理引擎
查看>>
我的友情链接
查看>>
HTML5 canvas 实现同步时钟
查看>>
css的线性渐变详解
查看>>
我的友情链接
查看>>
linux下面的性能分析工具简介
查看>>
ensp学会配置单区域的OSPF网络
查看>>
spring上下文中读取properties文件中的值
查看>>
Android数据库(sqlite)加密方案
查看>>
freemarker.net模板引擎【ASP.NET MVC】
查看>>
mysql一键编译安装脚本,MySQL 主主实施部署,及读写分离
查看>>
zabbix之固定端口监控redis ,zabbix监控memcached
查看>>
[1line]用wget镜像网站
查看>>