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. LeetCode:动态规划

    动态规划 动态规划永远的神 这部分主要是学习了 labuladong 公众号中对于动态规划的讲解 刷了些 leetcode 题,在此做一些记录,不然没几天就忘光光了 题目 这部分内容直接上题目了,解题 ...

  2. UltraSoft - Alpha - Scrum Meeting 5

    Date: Apr q9th, 2020. Scrum 情况汇报 进度情况 组员 负责 昨日进度 后两日任务 CookieLau PM 统筹个人进度,协助推进进度 辅助前后端连接工作 刘zh 前端 完 ...

  3. Flutter的环境配置以及一些常见问题

    flutter & AndroidStudio flutter的下载与配置 flutter是Google推出的基于Dart语言开发的跨平台开源UI框架,能够支持安卓与iOS. flutter框 ...

  4. elasticsearch基于RBAC认证和集群之间的TLS通讯

    elasticsearch基于RBAC认证和集群之间的TLS通讯 一.背景 二.需要解决的问题 三.给es增加用户名和密码访问 1.修改config/elasticsearch.yml 2.访问es集 ...

  5. Stack2 攻防世界题目分析

    ---XCTF 4th-QCTF-2018 前言,怎么说呢,这题目还是把我折磨的可以的,我一开始是没有看到后面的直接狙击的,只能说呢. 我的不经意间的粗心,破坏了你许多的温柔 1.气的我直接检查保护: ...

  6. 广域网(ppp协议、HDLC协议)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105028759 学习课程:<2019王道考研计算机网络> 学习目的 ...

  7. 字符串与模式匹配算法(六):Needleman–Wunsch算法

    一.Needleman-Wunsch 算法 尼德曼-翁施算法(英语:Needleman-Wunsch Algorithm)是基于生物信息学的知识来匹配蛋白序列或者DNA序列的算法.这是将动态算法应用于 ...

  8. Win10下C语言转8086汇编

    目录 Win10下C语言转8086汇编 简介 开始 写C代码 转换成汇编代码 Win10下C语言转8086汇编 简介 最近学习<王爽汇编>,然后突发奇想,想一边写C语言用编译器将其翻译成汇 ...

  9. Kubernetes Deployment 源码分析(一)

    概述Deployment 基础创建 DeploymentReplicaSet滚动更新失败回滚历史版本回滚其他特性小结 概述 Deployment 是最常用的 Kubernetes 原生 Workloa ...

  10. Java中Lambda表达式的进化之路

    Lambda表达式的进化之路 为什么要使用Lambda表达式 可以简洁代码,提高代码的可读性 可以避免匿名内部类定义过多导致逻辑紊乱 在原先实现接口抽象方法的时候,需要通过定义一个实现接口的外部类来实 ...