关于DateTime::diff()有很多问题(和解决方案),但我还没有找到以下代码的任何解决方案:
$start = new DateTime('13:00');
$end = new DateTime('02:00');
$difference = $start->diff($end);
if ($difference->format('%R') === '-')
{
$passedMidnight = true;
}
else
{
$passedMidnight = false;
}
这基本上就是我在PHP 5.2中寻找的:一种方法,可以找出$end与$start相比是否已经过了午夜。
只检查两个日期是否在同一天就足够了吗?
$start = new DateTime('13:00');
$end = new DateTime('02:00');
if ($start->format('Y-m-d') == $end->format('Y-m-d'))
echo "Midnight has NOT passed";
else
echo "Midnight has passed";
我看不出这种情况会不起作用,因为夏令时通常会在凌晨2点改变时钟(对吧?)。
由于您只使用时间构建DateTime对象,因此您真正想做的是查看$end是否早于$start。您可以为此使用getTimestamp函数。
if ($end->getTimestamp() < $start->getTimestamp()) {
echo "Midnight has passed";
} else {
echo "Midnight has not passed";
}
我最终做到了这一点,这要归功于Pekka和PFHayes的想法:
$start = strtotime('13:00');
$end = strtotime('01:00');
if ($end < $start)
{
echo "Midnight has passed";
}
else
{
echo "Midnight has not passed";
}