【问题标题】:PHP stop negative time being displayedPHP停止显示负时间
【发布时间】:2015-06-23 07:40:38
【问题描述】:

美好的一天。

我有一个显示事件开始前的时间的脚本:我的脚本如下所示:

$gameDate = $row['event_date'];

if($gameDate !== $lastDate){
    $calcDate = $gameDate.$time;
    $calcDate = strtotime(str_replace('/', '-', $gameDate));        
    $remaining = $calcDate - time();
    $days_remaining = floor($remaining / 86400);
    $hours_remaining = floor(($remaining % 86400) / 3600);

if($days_remaining < 0 && $hours_remaining < 0){
    echo''; 
}

if($days_remaining == 0){
    echo 'Starts In: <span class="timeSpan">'.$hours_remaining.'</span> Hours';
}
else if($days_remaining != 0){
    echo' Starts In: <span class="timeSpan">'.$days_remaining.'</span> Days And <span class="timeSpan">'.$hours_remaining.'</span>Hours';       
}

我的脚本运行良好,事实上它运行良好,即使事件已过期,它也会继续计数:

我的问题

知道它为什么这样做吗?我阻止这种行为的 if 语句对我来说看起来不错......?

【问题讨论】:

    标签: php ajax datetime time


    【解决方案1】:

    假设即使事件已经开始并且您也不想显示负数,您需要将条件更改为OR

    为了避免其余代码执行和显示负数,您需要将其放在else 块中:

    if($days_remaining<0 || $hours_remaining<0) {
                         ^^ use OR
      // Event has already started
      echo ''; 
    } else {
      // the rest of your code in the `else` block
    }
    

    【讨论】:

    • 我明白你在说什么,我也想过,但是如果我使用OR 然后$days_remaining = 0 但$hours_remaining != 0(例如12小时)会不会停止代码即使它应该执行?因为 1 个条件现在评估为 TRUE..
    • @TimothyCoetzee 你没有使用!=,你使用的是&lt;,这是正确的,会给你正确的结果。因此,当小时数变为负数时,您不会显示计数器。您当然可以添加 else if 以在活动开始时显示不同的内容。
    • 我以 != 为例...但是如果您使用 OR 逻辑,您是否明白我的意思,只有 1 个条件需要为真...对吗?因此,如果还有 0 天,但距离开始还有几个小时,它不会阻止代码执行......你明白我在说什么还是我错过了什么?非常感谢您一直以来的帮助
    • @TimothyCoetzee 0 不小于 0,因此不会满足您的任何条件。 &lt;=&lt; 有很大区别。
    【解决方案2】:

    我不确定第一个 if 语句的右括号在哪里,但对于最后两个,它应该是:

    if ($days_remaining == 0 && $hours_remaining >= 0) {
        echo 'Starts In: <span class="timeSpan">'.$hours_remaining.'</span> Hours';
    }
    else if ($days_remaining > 0) {
        echo 'Starts In: <span class="timeSpan">'.$days_remaining.'</span> Days And <span class="timeSpan">'.$hours_remaining.'</span>Hours';       
    }
    

    【讨论】:

    • 谢谢,我会试一试,让你知道
    • 没问题,不过有个问题,echo''; 行的意义何在?我认为整个if 声明可以被删除...?
    • 可以删除回声,只是在事件过期时不显示任何内容....只是我尝试过的东西效率不高,我知道
    【解决方案3】:

    在我看来,您的代码中有两个错误。首先是检查日和小时是否小于0。我认为应该是

    if ($days_remaining<=0 && $hours_remaining<0){ ...
    

    第二个错误是:

    else if ($days_remaining != 0){ ...
    

    即使$days_remaining 为-2,此检查也会为真,因为-2 != 0。所以,最后的检查应该是:

    else if ($days_remaining > 0){ ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2012-10-15
      • 2013-07-21
      • 2017-11-21
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      相关资源
      最近更新 更多