查看PHP文档,下面两个DateTime对象的方法似乎都可以解决我的问题:
DateTime::diff:获取差异并使用它来确定哪个更古老。
DateTime::getTimestamp:获取UNIX时间戳并进行比较。
这两个方法在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)
显然在这个东西上没有比较算子。
Edit
显然我的假设是完全错误的(感谢Milen如此有效地说明了这一点)。这里有一个比较运算符,它很好用,谢谢。有时候我真的错过了一个编译器。这个bug在上面的代码中,我相信你会比我更快地找到它:)。
来自官方文件:
从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
来自官方文件:
从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
你提到了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');