如何在PHP 5.2.8中比较两个DateTime对象?

时间:2009-06-07 02:33:24

标签: php datetime

看一下PHP文档,DateTime对象的以下两种方法似乎都解决了我的问题:

这两种方法都在doco中标记为在版本> = 5.3中可用(并且,毫不奇怪,如果我尝试调用它们,我发现它们不存在)。我找不到5.2.8的任何具体文档,所以我不确定我的版本中是否有相同的方法。我有Googled这个问题并找到了一系列折衷的解决方案,其中没有一个解决了我非常简单的要求:

  • 如何比较两个DateTime对象?
  • 我在哪里可以找到以前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如此有效地说明这一点)。有一个比较运算符,它工作得很好,谢谢。有时我真的很想念编译器。错误在上面的代码中,我相信你会发现它比我快得多:)。

8 个答案:

答案 0 :(得分:399)

以下似乎确认了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:~#

答案 1 :(得分:39)

来自the official documentation

  

从PHP 5.2.2开始,可以使用comparison operators来比较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

答案 2 :(得分:30)

您还可以比较纪元秒:

$d1->format('U') < $d2->format('U')

来源:http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (关于DateTime的非常有趣的文章)

答案 3 :(得分:18)

如果您想比较日期而不是时间,可以使用:

$d1->format("Y-m-d") == $d2->format("Y-m-d")

答案 4 :(得分:0)

这可能会对你有所帮助。

$today = date("m-d-Y 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";
}

答案 5 :(得分:0)

$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';
}

答案 6 :(得分:0)

从PHP 7.x开始,您可以使用以下内容:

$aDate = new \DateTime('@'.(time()));
$bDate = new \DateTime('@'.(time() - 3600));

$aDate <=> $bDate; // => 1, `$aDate` is newer than `$bDate`

答案 7 :(得分:0)

您提到 DateTime::diff 用于比较两个日期,您可以使用它来获得比布尔值更精确的值。

例如天数:

$date1 = new DateTime('2021-07-09');
$date2 = new DateTime('2020-10-21');

echo $date1->diff($date2)->format('%R%a days');

但您也可以使用 DateTime::diff 的别名,即 date_diff (PHP 5 >= 5.3.0, PHP 7, PHP 8)

$date1 = new DateTime('2021-07-09');
$date2 = new DateTime('2020-10-21');

echo date_diff($date1, $date2)->format('%R%a days');