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 .

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

我很清楚,您正在两条不同的行上初始化 test1 和 test2。最有可能的是,它们返回不同的值,因此比较将返回 false。

然而,真正的问题是相同的运算符比较对象..,如果对象不同[引用到不同的对象]则返回false。

<?php
class Foo{}
$Foo1 = new Foo();
$Foo2 = new Foo();
echo ("Foo1 === Foo2");
var_dump($Foo1 === $Foo2);

导致::

Foo1 === Foo2bool(false)
如果按

顺序创建变量,则结果必须为"false",因为php中的datetime('now'(返回此刻的时间,因此每个变量的秒数都会发生变化,但是问题可能是因为没有设置此参数date_default_timezone_set('America/New_York'(;

    php > var_dump($test1);
       object(DateTime)#1 (3) {
       ["date"]=>
       string(26) "2015-06-23 15:46:34.000000"
       ["timezone_type"]=>
       int(3)
       ["timezone"]=>
       string(16) "America/New_York"
     }
     php > var_dump($test2);
     object(DateTime)#3 (3) {
     ["date"]=>
     string(26) "2015-06-23 15:46:38.000000"
     ["timezone_type"]=>
    int(3)
    ["timezone"]=>
     string(16) "America/New_York"
    }