探讨:如何使用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作的文本留言本的例子(三)
Oct 09 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
May 24 PHP
PHP register_shutdown_function函数的深入解析
Jun 03 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
浅析PHP中Session可能会引起并发问题
Jul 23 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 PHP
php使用fullcalendar日历插件详解
Mar 06 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
Feb 22 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/03/02 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
2007/05/30 Javascript
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
详解Python中的多线程编程
2015/04/09 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
浅谈django channels 路由误导
2020/05/28 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
交通事故检查书范文
2014/01/30 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
大学军训感言300字
2014/03/09 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
2016七夕情人节广告语
2016/01/28 职场文书
八年级作文之友谊
2019/12/02 职场文书
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL