分享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 相关文章推荐
JAVA/JSP学习系列之二
Oct 09 PHP
php代码优化及php相关问题总结
Oct 09 PHP
php,不用COM,生成excel文件
Oct 09 PHP
又一个php 分页类实现代码
Dec 03 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
zf框架的数据库追踪器使用示例
Mar 13 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
php简单获取目录列表的方法
Mar 24 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
什么是短波收听SWL
2021/03/01 无线电
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
2018/09/25 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
Python脚本打包成可执行文件过程解析
2020/10/20 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
决定成败的关键——创业计划书
2014/01/24 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
入股协议书
2014/04/14 职场文书
法制宣传月活动方案
2014/05/11 职场文书
中药学专业求职信
2014/05/31 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
婚育证明样本
2015/06/16 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python