探讨:如何使用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 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
May 16 PHP
PHP 创建标签云函数代码
May 26 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
浅谈PHP解析URL函数parse_url和parse_str
Nov 11 PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 PHP
php使用正则验证中文
Apr 06 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
php发送http请求的常用方法分析
Nov 08 PHP
php实现的读取CSV文件函数示例
Feb 07 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
Jul 20 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 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
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
解析php中curl_multi的应用
2013/07/17 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
淘宝搜索框效果实现分析
2011/03/05 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
Vue.js划分组件的方法
2017/10/29 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
解决yum对python依赖版本问题
2019/07/05 Python
使用python matploblib库绘制准确率,损失率折线图
2020/06/16 Python
jupyter 添加不同内核的操作
2021/02/06 Python
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
大学运动会通讯稿
2014/01/28 职场文书
社区党建工作汇报材料
2014/10/27 职场文书
街道社区活动报告
2015/02/05 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
大学副班长竞选稿
2015/11/21 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
python实现自定义日志的具体方法
2021/05/28 Python
instantclient客户端 连接oracle数据库
2022/04/26 Oracle