我发现可以将PHP中的DateTime对象与另一个对象进行比较,因为">“和"<”运算符是重载的。
和DateInterval是一样的吗?
当我试图回答这个问题时,我发现了一些奇怪的事情:
<?php
$today = new DateTime();
$release = new DateTime('14-02-2012');
$building_time = new DateInterval('P15D');
var_dump($today->diff($release));
var_dump($building_time);
var_dump($today->diff($release)>$building_time);
var_dump($today->diff($release)<$building_time);
if($today->diff($release) < $building_time){
echo 'oK';
}else{
echo 'Just a test';
}
它总是与“只是一个测试”相呼应。var_dump输出为:
object(DateInterval)#4 (8) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(18)
["h"]=>
int(16)
["i"]=>
int(49)
["s"]=>
int(19)
["invert"]=>
int(1)
["days"]=>
int(18)
}
object(DateInterval)#3 (8) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(15)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
bool(false)
}
bool(false)
bool(true)
当我尝试使用DateTime "01-03-2012“时,一切都正常。
发布于 2012-03-04 01:05:02
$aujourdhui
是从哪里来的?当然,它在语言上和$today
是一样的,但是PHP不知道这一点!更改代码以使用$today
将打印"oK"
!
如果没有定义,如果你的$aujourdhui->diff($release)
解释器不会因为错误而中止(我的解释器会),那么它的计算结果就会是0
。
发布于 2019-04-04 13:05:15
如果您使用的时间间隔不超过一个月,则很容易将2个间隔转换为秒并进行比较。$dateInterval->format("%s")
只返回秒组件,所以我最终这样做:
function intervalToSeconds($dateInterval) {
$s = (
($dateInterval->format("%d")*24*60*60) +
($dateInterval->format("%h")*60*60) +
($dateInterval->format("%i")*60) +
$dateInterval->format("%s")
);
return $s;
}
发布于 2012-08-08 05:17:02
我使用了以下比较DateIntervals的解决方法:
version_compare(join('.', (array) $dateIntervalA), join('.', (array) $dateIntervalB));
https://stackoverflow.com/questions/9547855
复制相似问题