探讨:如何使用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 相关文章推荐
做一个有下拉功能的留言版
Oct 09 PHP
下载文件的点击数回填
Oct 09 PHP
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
Mar 10 PHP
第4章 数据处理-php数组的处理-郑阿奇
Jul 04 PHP
浅谈PHP强制类型转换,慎用!
Jun 06 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
php 输入输出流详解及示例代码
Aug 25 PHP
php mysql获取表字段名称和字段信息的三种方法
Nov 13 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
Mar 22 PHP
php面向对象重点知识分享
Sep 27 PHP
PHP命名空间(namespace)原理与用法详解
Dec 11 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 array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
简单了解Django项目应用创建过程
2020/07/06 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
2013年保送生自荐信格式
2013/11/20 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
六年级作文之自救
2019/12/19 职场文书
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android