探讨:如何使用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图片处理类 phpThumb参数用法介绍
Mar 11 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
php ci框架验证码实例分析
Jun 26 PHP
php5.5新数组函数array_column使用
Jul 08 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
Apr 08 PHP
浅谈discuz密码加密的方式
May 22 PHP
PHP date函数常用时间处理方法
May 11 PHP
PHP中STDCLASS用法实例分析
Nov 11 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 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
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
php创建多级目录代码
2008/06/05 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
php无限遍历目录示例
2014/02/21 PHP
php使用反射插入对象示例分享
2014/03/11 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
php实现图片缩略图的方法
2016/03/29 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
BootStrap实用代码片段之一
2016/03/22 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
python创建临时文件夹的方法
2015/07/06 Python
python开发之函数定义实例分析
2015/11/12 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
精选奢华:THE LIST
2019/09/05 全球购物
草船借箭教学反思
2014/02/03 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
纪律教育月活动总结
2014/08/26 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
军训通讯稿范文
2015/07/18 职场文书
商业计划书格式、范文
2019/03/21 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
Android中View.post和Handler.post的关系
2022/06/05 Java/Android