分享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 相关文章推荐
php预定义常量
Dec 25 PHP
发布一个用PHP fsockopen写的HTTP下载的类
Feb 22 PHP
生成php程序的php代码
Apr 07 PHP
黑夜路人出的几道php笔试题
Aug 04 PHP
PHP 获取客户端真实IP地址多种方法小结
May 15 PHP
国外PHP程序员的13个好习惯小结
Feb 20 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
PHP中Closure类的使用方法及详解
Oct 09 PHP
必须收藏的23个php实用代码片段
Feb 02 PHP
django中的ajax组件教程详解
Oct 18 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 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获取某个目录大小的代码
2008/09/10 PHP
用php将任何格式视频转为flv的代码
2009/09/03 PHP
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
php 操作调试的方法
2012/07/12 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
JS二分查找算法详解
2017/11/01 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
python线程池的实现实例
2013/11/18 Python
Python中关于使用模块的基础知识
2015/05/24 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
Python自动登录QQ的实现示例
2020/08/28 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
儿科护士实习自我鉴定
2013/10/17 职场文书
单位人事专员介绍信
2014/01/11 职场文书
小学生打架检讨书
2014/01/26 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
Pytest中conftest.py的用法
2021/06/27 Python