2009-12-21 168 views
77

有没有一种快速的方法来计算日期差异在PHP?例如:php日期差异?

$date1 = '2009-11-12 12:09:08'; 
$date2 = '2009-12-01 08:20:11'; 

然后做一个计算,$ DATE2减去DATE1 $

我读php.net文档,但没有运气。有没有快速的方法来做到这一点?

+0

@kiamlaluno - 这不是一个确切的*重复,因为它是一个更复杂的问题(该问题中的OP要格式化为“x年,y月,z天”等)。 – 2009-12-21 14:32:01

+0

我想在“天”:) – mysqllearner 2009-12-21 14:39:26

回答

43

strtotime会将您的日期字符串转换为unix时间戳。 。自Unix纪元(秒

$ts1 = strtotime($date1); 
$ts2 = strtotime($date2); 

$seconds_diff = $ts2 - $ts1; 
+11

请注意,如果两个日期之间存在时间变化(如春季或秋季),这可能会给你不同的结果。 试试这个: echo strtotime('2013-03-30 21:00') - strtotime('2013-03-29 21:00'); echo strtotime('2013-03-31 21:00') - strtotime('2013-03-30 21:00'); 你得到86400和82800. 结果其实是正确的。但如果用86400除以得到需要考虑的天数(所以最好使用日期差异函数)。 – memical 2013-03-29 11:07:10

+2

如果您使用的是现代版本的php,请使用adam的解决方案。 PHP有很多代码来解决与时间有关的异常情况。 – txyoji 2014-09-22 19:12:24

161

我建议使用日期 - > DIFF功能,如实施例中所示:

$dStart = new DateTime('2012-07-26'); 
    $dEnd = new DateTime('2012-08-26'); 
    $dDiff = $dStart->diff($dEnd); 
    echo $dDiff->format('%R'); // use for point out relation: smaller/greater 
    echo $dDiff->days; 

看到http://www.php.net/manual/en/datetime.diff.php

+2

这个函数需要php 5.3或更高版本,如@txyoji – levhita 2012-10-02 22:45:11

+13

所述使用'$ diffInDays =(int)$ dDiff-> format(“%r%a”);'获取可以直接使用的值,例如“-2”或“2”(格式参数描述请参见http://www.php.net/manual/en/dateinterval.format.php) – flu 2012-10-29 13:36:08

+0

如果您不小心或未尝试将日期与“ - ”更改为“:” time ... – 2013-05-26 16:57:14

13

下面代码将给出通过在两个日期之间取出差异 ..

$str = "Jul 02 2013"; 
$str = strtotime(date("M d Y ")) - (strtotime($str)); 
echo floor($str/3600/24); 
+0

当试图计算我的'JQuery datepicker'的日期差异时,'floor'给了我奇怪的结果。例如,'floor((stsetup(())和strtotime($ _ POST ['date']))?$ _POST ['date']:date(“Ymd”))) - strtotime(date(“Ymd”)))/ 3600/24)'给我在3月31日和3月21日之间的9.9583333333333的差异(所以当我期待10时,9倒数)。我用'round'函数来解决问题。 – 2016-03-21 18:44:37

+0

是乔纳森, 你是对的。 – 2016-09-13 08:07:58