分享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 相关文章推荐
如何给phpadmin一个保护
Oct 09 PHP
PHP提取中文首字母
Apr 09 PHP
php cookis创建实现代码
Mar 16 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
PHP实现邮件群发的源码
Jun 18 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
php生成动态验证码gif图片
Oct 19 PHP
php英文单词统计器
Jun 23 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
Oct 08 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第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
Python Django框架实现应用添加logging日志操作示例
2019/05/17 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
pytorch 求网络模型参数实例
2019/12/30 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
举例讲解Python装饰器
2020/12/24 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
数据库连接池的工作原理
2012/09/26 面试题
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
收入证明怎么写
2015/06/12 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python