探讨:如何使用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 相关文章推荐
新版mysql+apache+php Linux安装指南
Oct 09 PHP
php 中的str_replace 函数总结
Apr 27 PHP
php设计模式  Command(命令模式)
Jun 17 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
Nov 03 PHP
Yii框架form表单用法实例
Dec 04 PHP
yii2中的rules 自定义验证规则详解
Apr 19 PHP
php快速排序原理与实现方法分析
May 26 PHP
PHP中类的自动加载的方法
Mar 17 PHP
php 获取xml接口数据的处理方法
May 31 PHP
PHP连接sftp并下载文件的方法教程
Aug 26 PHP
laravel清除视图缓存的代码
Oct 23 PHP
PHP高并发和大流量解决方案整理
Mar 09 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对象递归引用造成内存泄漏分析
2014/08/28 PHP
php微信支付之APP支付方法
2015/03/04 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
php-app开发接口加密详解
2018/04/18 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
vue中的scope使用详解
2017/10/29 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
2018/01/13 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Python操作列表之List.insert()方法的使用
2015/05/20 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
python字符串下标与切片及使用方法
2020/02/13 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
英国女士家居服网站:hush
2017/08/09 全球购物
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
优秀的毕业生的自我评价
2013/12/12 职场文书
小学毕业感言300字
2014/02/19 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
南京导游词
2015/02/03 职场文书