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

 更新时间:2013年06月13日 15:14:48   作者:  
本篇文章是对使用PHP实现计算两个日期间隔的年、月、周、日数的方法进行了详细的分析介绍,需要的朋友参考下

使用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使用parse_str实现查询字符串解析到变量中的方法

    php使用parse_str实现查询字符串解析到变量中的方法

    这篇文章主要介绍了php使用parse_str实现查询字符串解析到变量中的方法,较为详细的分析了parse_str()函数的功能及字符串解析为变量的具体用法,并总结了使用中的相关注意事项,需要的朋友可以参考下
    2017-02-02
  • Linux服务器下PHPMailer发送邮件失败的问题解决

    Linux服务器下PHPMailer发送邮件失败的问题解决

    这篇文章主要给大家介绍了关于如何解决Linux服务器下PHPMailer发送邮件失败的问题,文中通过示例代码介绍的很详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • php session的应用详细介绍

    php session的应用详细介绍

    这篇文章主要介绍了php session的应用详细介绍的相关资料,需要的朋友可以参考下
    2017-03-03
  • PHP+JQuery+Ajax实现分页方法详解

    PHP+JQuery+Ajax实现分页方法详解

    这篇文章主要介绍了PHP+JQuery+Ajax实现分页的方法,结合实例形式详细分析了php数据查询、分页设置及ajax交互的相关技巧,并总结了分页的相关注意事项,需要的朋友可以参考下
    2016-08-08
  • PHP unset函数原理及使用方法解析

    PHP unset函数原理及使用方法解析

    这篇文章主要介绍了PHP unset函数原理及使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • PHP文件下载实例代码浅析

    PHP文件下载实例代码浅析

    这篇文章主要为大家详细介绍了PHP文件下载实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • php对大文件进行读取操作的实现代码

    php对大文件进行读取操作的实现代码

    在php中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file、file_get_contents之类的函数,简简单单的几行代码就能很漂亮的完成我们所需要的功能。但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法
    2013-01-01
  • dedecms中显示数字验证码的修改方法

    dedecms中显示数字验证码的修改方法

    dedecms中显示数字验证码的修改方法...
    2007-03-03
  • PHP面向对象程序设计重载(overloading)操作详解

    PHP面向对象程序设计重载(overloading)操作详解

    这篇文章主要介绍了PHP面向对象程序设计重载(overloading)操作,结合实例形式详细分析了php面向对象程序设计重载原理、实现方法及相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • 基于PHP导出Excel的小经验 完美解决乱码问题

    基于PHP导出Excel的小经验 完美解决乱码问题

    本篇文章是对PHP导出Excel乱码问题的解决方法就行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论