如何将DateTime对象与从string创建的DateTime进行比较

时间:2015-06-24 12:44:34

标签: php symfony datetime

我只是在某些条件完成时尝试执行一些更新,其中一个与两个日期之间的比较相关:一个从DB获得并由Symfony2作为DateTime对象返回,第二个从循环中获取字符串并转换为DateTime对象。

这是我正在测试的简单代码:

$last = new \DateTime('2015-01-21T19:44:25.000Z');
$current = new \DateTime('2015-06-23 22:10:23');

if ($last > $current) {
    echo 'yes';
} else {
    echo 'no';
}

输出。现在,如果我尝试在OOP中比较相同的内容如下:

$lastModifiedAt = new \DateTime($row['LastModifiedDate']);
$lastSyncAt = $entity->getLastSyncAt();

if ($lastModifiedAt > $lastSyncAt) {
    ....
}

这是var_export($lastModifiedAt)var_export($lastSyncAt)的输出:

DateTime::__set_state(array(
   'date' => '2015-06-16 19:23:41.000000',
   'timezone_type' => 2,
   'timezone' => 'Z',
))

DateTime::__set_state(array(
   'date' => '2015-06-24 07:35:14.000000',
   'timezone_type' => 3,
   'timezone' => 'America/Caracas',
))

执行总是进入条件,为什么?我在比较中做错了什么?

修改

这对我来说很奇怪,但我的代码可能是错误的。感谢 @ marcin-orlowski ,我也运行了以下测试:

var_dump($lastModifiedAt == $lastSyncAt);
var_dump($lastModifiedAt > $lastSyncAt);
var_dump($lastModifiedAt < $lastSyncAt);

这就是结果:

bool(false)
bool(false) => this is the comparison I am doing
bool(true)

所以比较是对的,或许在我的代码中还有别的东西,无论如何,thx

2 个答案:

答案 0 :(得分:2)

有一个很好的库来处理与DateTime相关的问题.. https://github.com/briannesbitt/Carbon。如果上面提到的案例不是你处理DateTime的唯一地方,那么我会考虑用Carbon来投资。

答案 1 :(得分:-2)

您可以使用getTimestamp():

$date = new DateTime();
echo $date->getTimestamp();

if ($last->getTimestamp() > $current->getTimestamp()) {
    echo 'yes';
} else {
    echo 'no';
}