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

2022-08-30 06:00:52

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

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

  • 如何比较两个 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) 

显然,这个家伙没有比较运算符。

编辑

显然,我的假设是完全错误的(感谢米伦如此有效地说明了这一点)。有一个比较运算符,它工作得很好,谢谢。有时我真的很想念一个编译器。该错误在上面的代码中,我相信您会发现它比我:)快得多。


答案 1

以下内容似乎证实了 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:~#

答案 2

来自官方文档

从 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

推荐