我只是在某些条件完成时尝试执行一些更新,其中一个与两个日期之间的比较相关:一个从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
答案 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';
}