分享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的一个完整SMTP类(解决邮件服务器需要验证时的问题)
Oct 09 PHP
用文本作数据处理
Oct 09 PHP
php模板之Phpbean的目录结构
Jan 10 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
在PHP中PDO解决中文乱码问题的一些补充
Sep 06 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
Jan 10 PHP
php 文本文件的读取效率
Feb 10 PHP
php创建多级目录的方法
Mar 24 PHP
php函数连续调用实例分析
Jul 30 PHP
php用户登录之cookie信息安全分析
May 13 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
掌握PHP垃圾回收机制详解
Mar 13 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教程 变量定义
2009/10/23 PHP
PHP模板引擎Smarty的缓存使用总结
2014/04/24 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
python 算法 排序实现快速排序
2012/06/05 Python
对python中return和print的一些理解
2017/08/18 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
毕业生找工作推荐信
2013/11/21 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
标准毕业生自荐信
2014/06/24 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
Pygame Time时间控制的具体使用详解
2021/11/17 Python
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL