如何在PHP5.2中将DateTime::diff()与DateTime::format(';%R';)一起使用?

如何在PHP5.2中将DateTime::diff()与DateTime::format(';%R';)一起使用?,php,datetime,diff,Php,Datetime,Diff,关于DateTime::diff()有很多问题(和解决方案),但我还没有找到以下代码的任何解决方案: $start = new DateTime('13:00'); $end = new DateTime('02:00'); $difference = $start->diff($end); if ($difference->format('%R') === '-') { $passedMidnight = true; } else { $passedMidnig

关于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;
}

这基本上就是我在PHP5.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";

我看不出这种情况会不起作用,因为DST通常在凌晨2点将时钟移动(对吗?)。

仅仅检查两个日期是否在同一天就足够了吗

$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";

我看不出这样的场景会不起作用,因为DST通常将时钟移到凌晨2点(对吗?)。

因为您构建的DateTime对象只有时间,那么您真正想做的是查看$end是否比$start在一天中来得早。您可以使用getTimestamp函数来实现这一点

if ($end->getTimestamp() < $start->getTimestamp()) {
    echo "Midnight has passed";
} else {
    echo "Midnight has not passed";
}
if($end->getTimestamp()<$start->getTimestamp()){
回声“午夜已经过去”;
}否则{
回声“午夜未过”;
}

因为您只使用时间构建DateTime对象,所以您真正想要做的是查看$end是否比$start在一天中来得早。您可以使用getTimestamp函数来实现这一点

if ($end->getTimestamp() < $start->getTimestamp()) {
    echo "Midnight has passed";
} else {
    echo "Midnight has not passed";
}
if($end->getTimestamp()<$start->getTimestamp()){
回声“午夜已经过去”;
}否则{
回声“午夜未过”;
}

多亏了Pekka和PFHayes的创意,我终于做到了这一点:

$start = strtotime('13:00');
$end = strtotime('01:00');

if ($end < $start)
{
    echo "Midnight has passed";
}
else
{
    echo "Midnight has not passed";
}
$start=strottime('13:00');
$end=strottime('01:00');
如果($end<$start)
{
回声“午夜已经过去”;
}
其他的
{
回声“午夜未过”;
}

多亏了Pekka和PFHayes的创意,我终于做到了这一点:

$start = strtotime('13:00');
$end = strtotime('01:00');

if ($end < $start)
{
    echo "Midnight has passed";
}
else
{
    echo "Midnight has not passed";
}
$start=strottime('13:00');
$end=strottime('01:00');
如果($end<$start)
{
回声“午夜已经过去”;
}
其他的
{
回声“午夜未过”;
}

$start->format('Y-m-d')和$end->format('Y-m-d')具有完全相同的值,返回的值为午夜未过。考虑到$start,$end实际上已经过了午夜。@Pestario不,它没有。没有日期的“02:00”是今天早上的“02:00”。如果这不是你想要的,你需要明确地说出来(例如,使用明确的日期)@Pekka这就是问题所在,我只有两次。@Pestario没有意义。“02:00”是在当天的早晨——这是全世界的同一个惯例。你到底想做什么?@Pekka在我在问题
$difference->format(“%R”)
中发布的示例中,返回“-”或什么也不返回。如果$end超过$start的午夜,则返回“-”。所以它神奇地知道02:00比13:00晚,没有给出日期。这就是我要找的。我希望现在更清楚。$start->format('Y-m-d')和$end->format('Y-m-d')具有完全相同的值,返回的值是Midnight NOT passed。考虑到$start,$end实际上已经过了午夜。@Pestario不,它没有。没有日期的“02:00”是今天早上的“02:00”。如果这不是你想要的,你需要明确地说出来(例如,使用明确的日期)@Pekka这就是问题所在,我只有两次。@Pestario没有意义。“02:00”是在当天的早晨——这是全世界的同一个惯例。你到底想做什么?@Pekka在我在问题
$difference->format(“%R”)
中发布的示例中,返回“-”或什么也不返回。如果$end超过$start的午夜,则返回“-”。所以它神奇地知道02:00比13:00晚,没有给出日期。这就是我要找的。我希望现在更清楚。这里的问题是DateTime::getTimestamp()是PHP5.3或更高版本,这是第一个问题,我需要在PHP5.2环境中运行它。在这种情况下,您可能只需要将输入字符串拆分为小时和分钟部分,并直接比较它们。感谢您的想法!我将在8小时内以单独的答案发布我的最终解决方案。这里的问题是DateTime::getTimestamp()是PHP5.3或更高版本,这是第一个问题,我需要在PHP5.2环境中运行它。在这种情况下,您可能只想将输入字符串拆分为小时和分钟部分,并直接比较。谢谢你的想法!我会在8小时内将我的最终解决方案作为单独的答案发布。