PHP 获取两个日期相差多少年,多少月,多少天,多少小时,并填充数组

<?php

/**
* 获取两个日期相差多少年,多少月,多少天,多少小时,并填充数组
* @param [type] $startTime [开始日期,如:2018-02-10 10:00]
* @param [type] $endTime [结束日期,如:2018-03-01 15:00]
* @param integer $type [单位类型:1小时,2天,3月,4年]
* @return [type] [description]
*/
function getTimesRange($startTime, $endTime, $type = 1)
{
$timeRange = []; $diffRange = diffBetweenTwoDate($startTime, $endTime, $type); switch ($type) {
case 1:
$timeRange[] = date('Y-m-d H:00', strtotime($startTime));
for ($i = 1; $i <= $diffRange['hours']; $i++) {
$timeRange[] = date('Y-m-d H:00', strtotime( date('Y-m-d H:00', strtotime($startTime))
. "+ " . $i . " hours"));
}
break; case 2:
$timeRange[] = date('Y-m-d', strtotime($startTime)); for ($i = 1; $i <= $diffRange['day']; $i++) {
$timeRange[] = date('Y-m-d', strtotime( date('Y-m-d', strtotime($startTime))
. "+ " . $i . " day"));
}
break; case 3:
$timeRange[] = date('Y-m', strtotime($startTime));
for ($i = 1; $i <= $diffRange['month']; $i++) {
$timeRange[] = date('Y-m', strtotime( date('Y-m', strtotime($startTime))
. "+ " . $i . " month"));
}
break; case 4:
       $timeRange[] = intval(date('Y', strtotime($startTime)));
       for ($i = 1; $i <= $diffRange['year']; $i++) {
        $timeRange[] = date('Y', strtotime($startTime)) + $i;
       }
      break;
    }

    return $timeRange;
} /**
* 获取两个日期相差多少年,多少月,多少天,多少小时
* @param [type] $startTime [开始日期,如:2018-02-10 10:00]
* @param [type] $endTime [结束日期,如:2018-03-01 15:00]
*/
function diffBetweenTwoDate($dateOne, $dateTwo)
{
$strtoDateOne = strtotime($dateOne);
$strtoDateTwo = strtotime($dateTwo); if ($strtoDateOne < $strtoDateTwo) {
$tmp = $strtoDateTwo;
$strtoDateTwo = $strtoDateOne;
$strtoDateOne = $tmp;
} $dateMonthOne = explode('-', date('Y-m', $strtoDateOne));
$dateMonthTwo = explode('-', date('Y-m', $strtoDateTwo)); $diff = [];
$diff['hours'] = ($strtoDateOne - $strtoDateTwo) / (60 * 60);
$diff['day'] = ($strtoDateOne - $strtoDateTwo) / (60 * 60 * 24);
$diff['month'] = abs($dateMonthOne[0] - $dateMonthTwo[0]) * 12 + abs($dateMonthOne[1] - $dateMonthTwo[1]);
$diff['year'] = date('Y', $strtoDateOne) - date('Y', $strtoDateTwo); return $diff;
} // 获取两个时间范围,年月日时,并填充数据
$timesRange = getTimesRange('2018-2-10 10:00', '2019-03-01 15:00', 3);
var_dump($timesRange); // 获取两个时间范围,年月日时
$timesRangeCount = diffBetweenTwoDate('2018-2-10 10:00', '2019-03-01 15:00');
var_dump($timesRangeCount);

PHP 获取两个日期相差多少年,多少月,多少天,多少小时,并填充数组的更多相关文章

  1. js 获取两个日期相差的天数--自定义方法

    //获取两个日期的相差天数 datedifference=function(sDate1, sDate2) { var dateSpan, tempDate, iDays; sDate1 = Date ...

  2. java 获取两个日期相差的毫秒数

    方法一可以使用date的getTime()方法来将当前日期格式的时间转换为毫秒数,进而相减. long systime = new Date().getTime();//当前系统时间        l ...

  3. MySQL计算两个日期相差的天数、月数、年数

    MySQL自带的日期函数TIMESTAMPDIFF计算两个日期相差的秒数.分钟数.小时数.天数.周数.季度数.月数.年数,当前日期增加或者减少一天.一周等等. SELECT TIMESTAMPDIFF ...

  4. 【zc】 php计算两个日期相隔多少年,多少月,多少日的函数

    /* *function:计算两个日期相隔多少年,多少月,多少天 *数据接受格式: '2014-12-03','2000-12-01'; *param string $date1[格式如:2011-1 ...

  5. java7与java8中计算两个日期间隔多少年多少月多少天的实现方式

    最近工作中碰到个新需求,计算每个员工入职公司的时长,要求形式为多少年多少月多少天形式,某个值为0就跳过不显示,因为前段时间学习过java8新特性,对于这个需求,java8的新时间日期API可以直接解决 ...

  6. Java 获取两个日期之间的日期

    1.前期需求,两个日期,我们叫他startDate和endDate,然后获取到两个日期之间的日期 /** * 获取两个日期之间的日期 * @param start 开始日期 * @param end ...

  7. php计算两个日期相差 年 月 日

    在PHP程序中,很多时候都会遇到处理时间的问题,比如:判断用户在线了多长时间,共登录了多少天,两个帖子发布的时间差或者是不同操作之间的日志记录等等.在文章中,简单地举例介绍了PHP中如何计算两个日期相 ...

  8. js计算2个日期相差的天数,两个日期相差的天数,日期相隔天数

    js计算2个日期相差的天数,两个日期相差的天数,日期相隔天数 >>>>>>>>>>>>>>>>>& ...

  9. java计算两个日期相差多少天

    java计算两个日期相差多少天 public class DateUtil{ public static int betweenDays(Date startDate, Date endDate ) ...

随机推荐

  1. keras框架下的深度学习(二)二分类和多分类问题

    本文第一部分是对数据处理中one-hot编码的讲解,第二部分是对二分类模型的代码讲解,其模型的建立以及训练过程与上篇文章一样:在最后我们将训练好的模型保存下来,再用自己的数据放入保存下来的模型中进行分 ...

  2. 提升使用Linux效率的小操作

    提升使用Linux效率的小操作 保存更新? 本文记录了个人在使用Linux时觉得好用的一些快捷方式/功能: 为那种知道了能提高效率,但是的不知道也并没有影响的操作. 历史命令 该操作用于快速查看已使用 ...

  3. Spring Cloud Gateway + Jwt + Oauth2 实现网关的鉴权操作

    Spring Cloud Gateway + Jwt + Oauth2 实现网关的鉴权操作 一.背景 二.需求 三.前置条件 四.项目结构 五.网关层代码的编写 1.引入jar包 2.自定义授权管理器 ...

  4. 华为HG255D挂卡中继专用旋风科技固件

    正的挂卡不掉线不掉速,稳定上网看上去好像很NB的样子 挂卡设置教程:http://picimg.lshou.com/pic/clou ... /6/t/1/30247515.mp4 固件链接: htt ...

  5. 最长子序列(线性DP)学习笔记

    子序列和子串不一样.子串要求必须连续,而子序列不需要连续. 比如说\(\{a_1,a_2\dots a_n\}\),他的子串就是\(\{a_i,a_{i+1},\dots, a_j|1\leq i\l ...

  6. 内核驱动编译之Makefile shell pwd路径问题

    一般我们在写Makefile的时候为了获取到当前Makefile所在的文件夹路径,会使用TopDIR ?= $(shell pwd)来定义,后续的文件路径都是基于此TopDIR基础上使用. 今天在移植 ...

  7. linux命令中find, which、whereis、locate,有什么区别?

    whatis 用于查询一个命令执行什么功能,并将查询结果打印到终端上 which 查看可执行文件的位置 whereis 查看文件的位置 man Linux提供了丰富的帮助手册,当你需要查看某个命令的参 ...

  8. ACM 数据读写/对拍

    freopen()函数在ACM中的使用 - cfzjxz的专栏 - 博客频道 - CSDN.NET 在做acm题目的过程中,我们需要在本地机器上调试.调试过程中,如果输入数据少还可以接受,但如果输入数 ...

  9. hdu 5095 Linearization of the kernel functions in SVM(模拟,分类清楚就行)

    题意: INPUT: The input of the first line is an integer T, which is the number of test data (T<120). ...

  10. Spring Cloud 微服务实战——nacos 服务注册中心搭建(附源码)

    作为微服务的基础功能之一的注册中心担任重要的角色.微服务将单体的服务拆分成不同的模块下的服务,而不同的模块的服务如果进行通信调用呢?这就需要服务注册与发现.本文将使用阿里开源项目 nacos 搭建服务 ...