分享PHP计算两个日期相差天数的代码


Posted in PHP onDecember 23, 2015

本文实例讲述了php计算两个日期相差天数的方法。分享给大家供大家参考。具体实现方法如下:

<?php
$date1 = date( 'Y-m-d' );
$date2 = "2015-12-04";
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);
-------------------------------------------------------- OR
$date1 = new DateTime("2007-03-24");
$date2 = new DateTime("2009-06-26");
$interval = $date1->diff($date2);
echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 
// shows the total amount of days (not divided into years, months and days like above)
echo "difference " . $interval->days . " days ";
-------------------------------------------------------- OR  
  
/**
 * Calculate differences between two dates with precise semantics. Based on PHPs DateTime::diff()
 * implementation by Derick Rethans. Ported to PHP by Emil H, 2011-05-02. No rights reserved.
*/
function _date_range_limit($start, $end, $adj, $a, $b, $result)
{
 if ($result[$a] < $start) {
  $result[$b] -= intval(($start - $result[$a] - 1) / $adj) + 1;
  $result[$a] += $adj * intval(($start - $result[$a] - 1) / $adj + 1);
 }
 if ($result[$a] >= $end) {
  $result[$b] += intval($result[$a] / $adj);
  $result[$a] -= $adj * intval($result[$a] / $adj);
 }
 return $result;
}
function _date_range_limit_days($base, $result)
{
 $days_in_month_leap = array(31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
 $days_in_month = array(31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
 _date_range_limit(1, 13, 12, "m", "y", &$base);
 $year = $base["y"];
 $month = $base["m"];
 if (!$result["invert"]) {
  while ($result["d"] < 0) {
   $month--;
   if ($month < 1) {
    $month += 12;
    $year--;
   }
   $leapyear = $year % 400 == 0 || ($year % 100 != 0 && $year % 4 == 0);
   $days = $leapyear ? $days_in_month_leap[$month] : $days_in_month[$month];
   $result["d"] += $days;
   $result["m"]--;
  }
 } else {
  while ($result["d"] < 0) {
   $leapyear = $year % 400 == 0 || ($year % 100 != 0 && $year % 4 == 0);
   $days = $leapyear ? $days_in_month_leap[$month] : $days_in_month[$month];
   $result["d"] += $days;
   $result["m"]--;
   $month++;
   if ($month > 12) {
    $month -= 12;
    $year++;
   }
  }
 }
 return $result;
}
function _date_normalize($base, $result)
{
 $result = _date_range_limit(0, 60, 60, "s", "i", $result);
 $result = _date_range_limit(0, 60, 60, "i", "h", $result);
 $result = _date_range_limit(0, 24, 24, "h", "d", $result);
 $result = _date_range_limit(0, 12, 12, "m", "y", $result);
 $result = _date_range_limit_days(&$base, &$result);
 $result = _date_range_limit(0, 12, 12, "m", "y", $result);
 return $result;
}
/**
 * Accepts two unix timestamps.
 */
function _date_diff($one, $two)
{
 $invert = false;
 if ($one > $two) {
  list($one, $two) = array($two, $one);
  $invert = true;
 }
 $key = array("y", "m", "d", "h", "i", "s");
 $a = array_combine($key, array_map("intval", explode(" ", date("Y m d H i s", $one))));
 $b = array_combine($key, array_map("intval", explode(" ", date("Y m d H i s", $two))));
 $result = array();
 $result["y"] = $b["y"] - $a["y"];
 $result["m"] = $b["m"] - $a["m"];
 $result["d"] = $b["d"] - $a["d"];
 $result["h"] = $b["h"] - $a["h"];
 $result["i"] = $b["i"] - $a["i"];
 $result["s"] = $b["s"] - $a["s"];
 $result["invert"] = $invert ? 1 : 0;
 $result["days"] = intval(abs(($one - $two)/86400));
 if ($invert) {
  _date_normalize(&$a, &$result);
 } else {
  _date_normalize(&$b, &$result);
 }
 return $result;
}
$date = "2014-12-04 19:37:22";
echo '<pre>';
print_r( _date_diff( strtotime($date), time() ) );
echo '</pre>'; 
?>

希望本文所述对大家学习php程序设计有所帮助。

PHP 相关文章推荐
header()函数使用说明
Nov 23 PHP
据说是雅虎的一份PHP面试题附答案
Jan 07 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 29 PHP
PHP 根据IP地址控制访问的代码
Apr 22 PHP
yii实现CheckBox复选框在同一行显示的方法
Dec 03 PHP
PHP简单获取视频预览图的方法
Mar 12 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
php单一接口的实现方法
Jun 20 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
php传值方式和ajax的验证功能
Mar 27 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 #PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 #PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 #PHP
详解WordPress中简码格式标签编写的基本方法
Dec 22 #PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
Dec 22 #PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 #PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 #PHP
You might like
咖啡的化学
2021/03/03 咖啡文化
深入解析php之sphinx
2013/05/15 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
Vue keep-alive实践总结(推荐)
2017/08/31 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
python版本单链表实现代码
2018/09/28 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
python创建n行m列数组示例
2019/12/02 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
高中语文课后反思
2014/04/27 职场文书
工地安全质量标语
2014/06/07 职场文书
红与黑读书笔记
2015/06/29 职场文书
大学副班长竞选稿
2015/11/21 职场文书
图解上海144收音机
2021/04/22 无线电
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
在Docker容器中部署SQL Server
2022/04/11 Servers
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis