分享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 相关文章推荐
html中select语句读取mysql表中内容
Oct 09 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
php实现改变图片直接打开为下载的方法
Apr 14 PHP
微信API接口大全
Apr 15 PHP
php实现无限级分类(递归方法)
Aug 06 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
Oct 15 PHP
PHP重定向与伪静态区别
Feb 19 PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 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
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
JavaScript 变量命名规则
2009/09/23 Javascript
JavaScript 全角转半角部分
2009/10/28 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
Three.js学习之网格
2016/08/10 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
微信小程序实现简单评论功能
2018/11/28 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python二分法实现实例
2013/11/21 Python
python算法学习之计数排序实例
2013/12/18 Python
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
python线程信号量semaphore使用解析
2019/11/30 Python
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
英文版餐饮业求职信
2013/10/18 职场文书
个人安全生产责任书
2014/07/28 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
办公用品质量保证书
2015/05/11 职场文书