探讨:如何使用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 相关文章推荐
Oracle 常见问题解答
Oct 09 PHP
用PHP开发GUI
Oct 09 PHP
一段php加密解密的代码
Oct 09 PHP
php session 错误
May 21 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
Jun 13 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
php实现smarty模板无限极分类的方法
Dec 07 PHP
php简单实现文件或图片强制下载的方法
Dec 06 PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 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对文件进行hash运算的方法
2015/04/03 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
2011/07/26 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
vuex的使用步骤
2021/01/06 Vue.js
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
对python多线程与global变量详解
2018/11/09 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
Python制作词云图代码实例
2019/09/09 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
最新的大学生找工作自我评价
2013/09/29 职场文书
药学专业毕业生求职信
2013/10/20 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
六一儿童节活动总结
2014/08/27 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
超市督导岗位职责
2015/04/10 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
Java异常处理try catch的基本用法
2021/12/06 Java/Android
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers