分享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 相关文章推荐
用文本文件制作留言板提示(下)
Oct 09 PHP
Windows 下的 PHP-PEAR 安装方法
Nov 20 PHP
PHP可变函数的使用详解
Jun 14 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
回帖脱衣服的图片实现代码
Feb 15 PHP
thinkphp中memcache的用法实例
Nov 29 PHP
php curl 上传文件代码实例
Apr 27 PHP
PHP经典算法集锦【经典收藏】
Sep 14 PHP
PHP基于PDO扩展操作mysql数据库示例
Dec 24 PHP
PHP单例模式实例分析【防继承,防克隆操作】
May 22 PHP
php实现登录页面的简单实例
Sep 29 PHP
Laravel 前端资源配置教程
Oct 18 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中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
基于PHP生成静态页的实现方法
2013/05/10 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
PHP数组函数知识汇总
2016/05/12 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
利用laravel搭建一个迷你博客实战教程
2017/08/13 PHP
jQuery基础语法实例入门
2014/12/23 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
Python制作CSDN免积分下载器
2015/03/10 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
python实现图片彩色转化为素描
2019/01/15 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
Python识别html主要文本框过程解析
2020/02/18 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
查环查孕证明
2014/01/10 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
Python socket如何解析HTTP请求内容
2022/02/12 Python
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS