PHP 日期时间比较

标签 php datetime comparison

我已经习惯在 PHP 中使用相同的比较运算符 (===),而不是相等比较运算符 (==)。我在使用 php 内置的 DateTime 对象时遇到了问题。我很困惑为什么在下面的代码中相等比较返回true,而相同比较返回false?

代码:

$test1 = new DateTime("now");       // What I thought were identical objects
$test2 = new DateTime("now");       // 
$test3 = new DateTime("tomorrow");

echo("test1: ");
var_dump($test1);
echo("<br/>test2: ");
var_dump($test2);

echo("now === now: ");
var_dump($test1 === $test2);

echo("<br/>now == now: ");
var_dump($test1 == $test2);

echo("<br/>now < now: ");
var_dump($test1 < $test2);

echo("<br/>now > now: ");
var_dump($test1 > $test2);

echo("<br/>now < tomorrow: ");
var_dump($test2 < $test3);

echo("<br/>now > tomorrow: ");
var_dump($test2 > $test3);

输出:

    test1: object(DateTime)#36 (3) { ["date"]=> string(19) "2015-06-23 14:44:25" ["timezone_type"]=> int(3) ["timezone"]=> string(15) "America/Chicago" } 
    test2: object(DateTime)#37 (3) { ["date"]=> string(19) "2015-06-23 14:44:25" ["timezone_type"]=> int(3) ["timezone"]=> string(15) "America/Chicago" } 
    now === now: bool(false) 
    now == now: bool(true) 
    now < now: bool(false) 
    now > now: bool(false) 
    now < tomorrow: bool(true) 
    now > tomorrow: bool(false)

最佳答案

在对象比较的情况下 === 不仅会检查值和对象类型,还会检查引用。这就是为什么在您的情况下 === 由于两个单独的实例而返回 false。

只是为了澄清一下:-

https://eval.in/386378

注意:- 在第一种情况下,有两个单独的实例 $test1$test2,这就是为什么 === 即使返回 false对象类型和值是相等的。

但在第二种情况下,因为 $test1$test2 是相同的引用,所以它声明 true

同样在普通变量的情况下 === 只检查值和数据类型。其中 == 总是只检查值,只要数据类型不同,它就不会给出正确的输出。所以使用==时要小心。谢谢。

关于PHP 日期时间比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31011868/

相关文章:

php - 寻找一个干净地执行 PHP 数据库 session 的好例子

entity-framework - 比较两个 Entity Framework 实体的最佳方法是什么?

php - 3个不同的等于

c++比较在缓冲区中的2个字符串之间不起作用

Python:关于美国/太平洋和美国/洛杉矶时区的 datetime.astimezone 的奇怪行为?

java - 你如何在Java中减去日期?

PHP curl_multi - 如何限制文件的下载大小

javascript - 使用ajax插入查询而不重新加载整个页面

javascript - 具有单个 sql 查询的 PHP 分页

mysql - Laravel 5.6 显示早于当前日期和时间的数据库记录