如何比较PHP 5.2.8中的两个DateTime对象?
这看起来应该是非常简单的事情,但是现在我一直坚持页面错误这个问题,所以在这里。
看看PHP文档,下面两个DateTime对象的方法似乎都能解决我的问题:
- DateTime :: diff :获取差异并使用它来确定哪个更古老。
- DateTime :: getTimestamp :获取UNIX时间戳并比较这些时间戳。
这两种方法在doco中都标记为在版本> = 5.3中可用(并且,如果我尝试调用它们,我发现它们不存在)并不奇怪。 我找不到5.2.8的任何特定文档,所以我不确定在我的版本中是否有等效的方法。 我已经search了这个问题,发现了一个不拘一格的解决scheme,其中没有一个回答我非常简单的要求:
- 我如何比较两个DateTime对象?
- 我在哪里可以find以前的PHP版本的doco? 特别是版本5.2.8?
对于某些情况下,我有以下代码:
$st_dt = new DateTime(verifyParam ('start_date')); $end_dt = new DateTime(verifyParam ('end_date')); // is the end date more ancient than the start date? if ($end_dt < $start_dt)
显然这家伙没有比较运营商。
编辑: 显然我的假设是完全错误的(感谢Milen为了有效地说明这一点)。 有一个比较运算符,它工作得很好,谢谢。 有时我真的怀念一个编译器。 错误在上面的代码中,我相信你会发现它比我更快:)。
我期待着您的解决scheme简单的尴尬。
编辑:果然,尴尬随之而来…
以下似乎证实了DateTime类有比较运算符:
dev:~# php <?php date_default_timezone_set('Europe/London'); $d1 = new DateTime('2008-08-03 14:52:10'); $d2 = new DateTime('2008-01-03 11:11:10'); var_dump($d1 == $d2); var_dump($d1 > $d2); var_dump($d1 < $d2); ?> bool(false) bool(true) bool(false) dev:~# php -v PHP 5.2.6-1+lenny3 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 26 2009 20:09:03) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies dev:~#
你也可以比较纪元秒:
$d1->format('U') < $d2->format('U')
资料来源: http : //laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (关于DateTime的相当有趣的文章)
从官方文件 :
从PHP 5.2.2开始,可以使用比较运算符来比较 DateTime对象。
$date1 = new DateTime("now"); $date2 = new DateTime("tomorrow"); var_dump($date1 == $date2); // false var_dump($date1 < $date2); // true var_dump($date1 > $date2); // false
对于5.2.2之前的PHP版本(实际上对于任何版本),您可以使用diff 。
$datetime1 = new DateTime('2009-10-11'); // 11 October 2013 $datetime2 = new DateTime('2009-10-13'); // 13 October 2013 $interval = $datetime1->diff($datetime2); echo $interval->format('%R%a days'); // +2 days
如果你想比较date而不是时间,你可以使用这个:
$d1->format("Ymd") == $d2->format("Ymd")
$elapsed = '2592000'; // Time in the past $time_past = '2014-07-16 11:35:33'; $time_past = strtotime($time_past); // Add a month to that time $time_past = $time_past + $elapsed; // Time NOW $time_now = time(); // Check if its been a month since time past if($time_past > $time_now){ echo 'Hasnt been a month'; }else{ echo 'Been longer than a month'; }
这可能会帮助你。
$today = date("mdY H:i:s"); $thisMonth =date("m"); $thisYear = date("y"); $expectedDate = ($thisMonth+1)."-08-$thisYear 23:58:00"; if (strtotime($expectedDate) > strtotime($today)) { echo "Expected date is greater then current date"; return ; } else { echo "Expected date is lesser then current date"; }