PHP 日期时间比较
PHP DateTime Comparison
我已经习惯了在 PHP 中使用相同的比较运算符 (===),而不是相等比较运算符 (==)。我 运行 在使用 php 的内置 DateTime 对象时遇到问题。我很困惑为什么在下面的代码中相等比较 return 为真,而等同比较 return 为假?
代码:
$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)
我很清楚,您正在两条不同的线路上初始化 test1 和 test2。很可能他们 return 不同的值,因此比较将 return 错误。
然而真正的问题是 Identical Operator 比较对象 .. 如果对象不同[引用不同的对象],returns false。
<?php
class Foo{}
$Foo1 = new Foo();
$Foo2 = new Foo();
echo ("Foo1 === Foo2");
var_dump($Foo1 === $Foo2);
结果为 ::
Foo1 === Foo2bool(false)
在对象比较的情况下 ===
不仅会检查值和对象类型,还会检查引用。这就是为什么在你的情况下 ===
returns false 因为两个单独的实例。
只是为了澄清一下:-
注意:- 在第一种情况下,有两个单独的实例 $test1
和 $test2
,这就是为什么 ===
returns false even object type 并且值相等.
但在第二种情况下,因为 $test1
和 $test2
是相同的引用,所以它声明 true
.
同样在普通变量的情况下===
只检查值和数据类型。 ==
总是只检查值,只要数据类型不同,它就不会给出正确的输出。所以使用==
时要小心。谢谢。
如果按顺序创建变量,结果必须是"false",因为 php returns 中的 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"
}
我已经习惯了在 PHP 中使用相同的比较运算符 (===),而不是相等比较运算符 (==)。我 运行 在使用 php 的内置 DateTime 对象时遇到问题。我很困惑为什么在下面的代码中相等比较 return 为真,而等同比较 return 为假?
代码:
$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)
我很清楚,您正在两条不同的线路上初始化 test1 和 test2。很可能他们 return 不同的值,因此比较将 return 错误。
然而真正的问题是 Identical Operator 比较对象 .. 如果对象不同[引用不同的对象],returns false。
<?php
class Foo{}
$Foo1 = new Foo();
$Foo2 = new Foo();
echo ("Foo1 === Foo2");
var_dump($Foo1 === $Foo2);
结果为 ::
Foo1 === Foo2bool(false)
在对象比较的情况下 ===
不仅会检查值和对象类型,还会检查引用。这就是为什么在你的情况下 ===
returns false 因为两个单独的实例。
只是为了澄清一下:-
注意:- 在第一种情况下,有两个单独的实例 $test1
和 $test2
,这就是为什么 ===
returns false even object type 并且值相等.
但在第二种情况下,因为 $test1
和 $test2
是相同的引用,所以它声明 true
.
同样在普通变量的情况下===
只检查值和数据类型。 ==
总是只检查值,只要数据类型不同,它就不会给出正确的输出。所以使用==
时要小心。谢谢。
如果按顺序创建变量,结果必须是"false",因为 php returns 中的 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"
}