探讨:如何使用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 相关文章推荐
追求程序速度,而不是编程的速度
Apr 23 PHP
php header()函数使用说明
Jul 10 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
Apr 13 PHP
生成ubuntu自动切换壁纸xml文件的php代码
Jul 17 PHP
PHP中文分词的简单实现代码分享
Jul 17 PHP
PHP将XML转数组过程详解
Nov 13 PHP
php抽象类用法实例分析
Jul 07 PHP
yii2中添加验证码的实现方法
Jan 09 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 19 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 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中静态方法和非静态方法的相互调用
2016/10/04 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
Vue触发式全局组件构建的方法
2018/11/28 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
python实现简单登陆流程的方法
2018/04/22 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
在django模板中实现超链接配置
2019/08/21 Python
python global和nonlocal用法解析
2020/02/03 Python
python实现文法左递归的消除方法
2020/05/22 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
给老师的检讨书
2014/02/11 职场文书
老师的检讨书
2014/02/23 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
2014年检验员工作总结
2014/11/19 职场文书
风之谷观后感
2015/06/11 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android