探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数


Posted in PHP onJune 13, 2013

使用PHP实现计算两个日期间隔的年、月、周、日数:

<?php
    function format($a,$b){
        //检查两个日期大小,默认前小后大,如果前大后小则交换位置以保证前小后大
        if(strtotime($a)>strtotime($b)) list($a,$b)=array($b,$a);
        $start  = strtotime($a);
        $stop   = strtotime($b);
        $extend = ($stop-$start)/86400;
        $result['extends'] = $extend;
        if($extend<7){                //如果小于7天直接返回天数
            $result['daily'] = $extend;
        }elseif($extend<=31){        //小于28天则返回周数,由于闰年2月满足了
            if($stop==strtotime($a.'+1 month')){
                $result['monthly'] = 1;
            }else{
                $w = floor($extend/7);
                $d = ($stop-strtotime($a.'+'.$w.' week'))/86400;
                $result['weekly']  = $w;
                $result['daily']   = $d;
            }
        }else{
            $y=    floor($extend/365);
            if($y>=1){                //如果超过一年
                $start = strtotime($a.'+'.$y.'year');
                $a     = date('Y-m-d',$start);
                //判断是否真的已经有了一年了,如果没有的话就开减
                if($start>$stop){
                    $a = date('Y-m-d',strtotime($a.'-1 month'));
                    $m =11;
                    $y--;    
                }
                $extend = ($stop-strtotime($a))/86400;
            }
            if(isset($m)){
                $w = floor($extend/7);
                $d = $extend-$w*7;
            }else{
                $m = isset($m)?$m:round($extend/30);
                $stop>=strtotime($a.'+'.$m.'month')?$m:$m--;
                if($stop>=strtotime($a.'+'.$m.'month')){
                    $d=$w=($stop-strtotime($a.'+'.$m.'month'))/86400;
                    $w = floor($w/7);
                    $d = $d-$w*7;
                }
            }
            $result['yearly']  = $y;
            $result['monthly'] = $m;
            $result['weekly']  = $w;
            $result['daily']   = isset($d)?$d:null;
        }
        return array_filter($result);
    }    print_r(format('2012-10-1','2012-12-15'));
?>

运行结果:
Array([extends]=>75[monthly]=>2[weekly]=>2)

php 查询某天所在的周数及对应周的起始日期

/**
* @file
* @version  1.1
* @author  QQ83989686
* @date  2012-8-7 最后修改时间
* @brief 
*/
    //获取某个日期的 周数、周对应的开始结束时间
    private function getWeekStartEndDay($day)
    {
        $g  = strftime("%u",strtotime($day));
        return array('week_num'=>strftime("%V",strtotime($day)),'week_start_day'=>strftime('%Y-%m-%d',strtotime($day)-($g-1)*86400),'week_start_day_cn'=>strftime('%Y年%m月%d日',strtotime($day)-($g-1)*86400),'week_end_day'=>strftime('%Y-%m-%d',strtotime($day) + (7-$g)*86400),'week_end_day_cn'=>strftime('%Y年%m月%d日',strtotime($day) + (7-$g)*86400));
    }

PHP 相关文章推荐
小偷PHP+Html+缓存
Dec 20 PHP
php开启安全模式后禁用的函数集合
Jun 26 PHP
PHP递归调用的小技巧讲解
Feb 19 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
php简单分页类实现方法
Feb 26 PHP
php判断表是否存在的方法
Jun 18 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
Jun 29 PHP
静态html文件执行php语句的方法(推荐)
Nov 21 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
Jun 27 PHP
掌握PHP垃圾回收机制详解
Mar 13 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 PHP
判断php数组是否为索引数组的实现方法
Jun 13 #PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
Jun 13 #PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 #PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
Jun 13 #PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
Jun 13 #PHP
基于PHP Socket配置以及实例的详细介绍
Jun 13 #PHP
深入php socket的讲解与实例分析
Jun 13 #PHP
You might like
php实现无限级分类
2014/12/24 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
php字符串函数学习之substr()
2015/03/27 PHP
php文件上传的两种实现方法
2016/04/04 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
Javascript 陷阱 window全局对象
2008/11/26 Javascript
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
纯JS实现轮播图
2017/02/22 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
python类的实例化问题解决
2019/08/31 Python
Java面试题:为什么要用Java
2012/05/11 面试题
工程概预算专业毕业生求职信
2013/10/04 职场文书
大学生预备党员自我评价分享
2013/11/16 职场文书
网上开商店的创业计划书
2014/01/19 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
建设工程授权委托书
2014/09/22 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
技术入股协议书
2016/03/22 职场文书
Android Rxjava3 使用场景详解
2022/04/07 Java/Android