探讨:如何使用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初学者头疼问题总结
Oct 09 PHP
我的论坛源代码(三)
Oct 09 PHP
模仿OSO的论坛(五)
Oct 09 PHP
PHP数据流应用的一个简单实例
Sep 14 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
Dec 07 PHP
解析php php_openssl.dll的作用
Jul 01 PHP
PHP中字符安全过滤函数使用小结
Feb 25 PHP
PHP实现XML与数据格式进行转换类实例
Jul 29 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
php实现的二分查找算法示例
Jun 20 PHP
深入理解PHP的远程多会话调试
Sep 21 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
PHP中的cookie
2006/11/26 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
JQuery UI皮肤定制
2009/07/27 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
Javascript中神奇的this
2016/01/20 Javascript
AngularJS 最常用的八种功能(基础知识)
2017/06/26 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
比较基础的php面试题及答案-填空题
2014/04/26 面试题
现金会计岗位职责
2013/12/05 职场文书
给儿子的表扬信
2014/01/15 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
市场总监岗位职责
2015/02/11 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
行政处罚事先告知书
2015/07/01 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
java项目构建Gradle的使用教程
2022/03/24 Java/Android
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技