分享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 相关文章推荐
PHP4实际应用经验篇(6)
Oct 09 PHP
PHP生成月历代码
Jun 14 PHP
超级简单的php+mysql留言本源码
Nov 11 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
Nov 02 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
thinkphp四种url访问方式详解
Nov 28 PHP
ThinkPHP3.2.2的插件控制器功能
Mar 05 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
php解析base64数据生成图片的方法
Dec 06 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 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
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
php新建文件的方法实例
2019/09/26 PHP
Javascript操作cookie的函数代码
2012/10/03 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
详解基于webpack&amp;gettext的前端多语言方案
2019/01/29 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
销售会计工作职责
2013/12/02 职场文书
学校安全检查制度
2014/01/27 职场文书
《手指教学》反思
2014/02/14 职场文书
春季防火方案
2014/05/10 职场文书
体育之星事迹材料
2014/05/11 职场文书
学校教师安全责任书
2014/07/23 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
酒会开场白大全
2015/06/01 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
python中sys模块的介绍与实例
2021/04/17 Python