【问题标题】:How to compare if the difference of 2 times is greater than 2 hours如果2倍的差异大于2小时如何比较
【发布时间】:2015-06-30 16:15:50
【问题描述】:

我必须比较减法的结果是否在不到 2 小时内更大。我不知道如何进行这种比较。我尝试了以下。对于第三个 if 是正确的,但对于第一个和第二个结果是不正确的。

这是我的看法:

 <?php
    $transport= new DateTime($row->transportDate);
    $max=new DateTime(max($forecast_array));
    $interval = $transport->diff($max);

    if($max->format('Y-m-d H:i:s') < $transport->format('Y-m-d H:i:s') && $interval->format('%h:%i:%s') >= '2:00:00' ) {     
     
    echo '<img src="<?= base_url();?>/assets/images/tick.png">';
     } 
     if($max->format('Y-m-d H:i:s') < $transport->format('Y-m-d H:i:s') && $interval->format('%h:%i:%s') < '2:00:00' ) {    
     
   echo '<img src="<?= base_url();?>/assets/images/warning.png">';
    }
     if($max->format('Y-m-d H:i:s') > $transport->format('Y-m-d H:i:s')) { 
    
    echo '<img src="<?= base_url();?>/assets/images/forbidden.png">';
      } ?> 
编辑:现在,我正在使用这个代码:它正确吗?

<?php
$transport = strtotime($row->transportDate); 
$max = strtotime(max($forecast_array));
$interval = abs($max - $transport); 

if($max < $transport &&  $interval >= 2 * 60 * 60 ) {     
                       
   echo '<img src="<?= base_url();?>/assets/images/tick.png">';
} 

【问题讨论】:

  • 我改变了你的标题,因为它以前读起来很奇怪。如果我正确理解了这个问题,我认为我没有改变意思。
  • 是的,我是这个意思。有办法吗?
  • 对不起,我不懂 PHP :/
  • Np,只是另一个提示。据我可以说,您发布的许多代码与问题没有直接关系(减去和比较时间)。尽量减少你发布的代码量,只包含相关部分;除非你觉得额外的上下文是必要的。扔掉太多代码会阻碍人们回答。
  • 这行得通,但也许您可以使用 OOP 编写它? Imho DateTime 是正确的方法。

标签: php datetime compare diff


【解决方案1】:

要像您的示例一样简单地比较日期/时间差异,我建议不要使用 DateTime() 类,而是使用简单的时间戳。 例如:

$transport = strtotime($row->transportDate); // strtotime parses the time if it is not a timestamp, if it already is just use as is, i.e. without strtotime()
$max = strtotime(max($forecast_array));
$intervall = abs($max - $transport); 
// $intervall is now the difference in seconds therefore you can do this simple check:
if($interval >= 2 * 60 * 60){ // 2 hours à 60 minutes à 60 seconds
    // interval > 2 hours
} else {
    //...
}

【讨论】:

    【解决方案2】:
     $transport= new DateTime($row->transportDate);
     $max=new DateTime(max($forecast_array));
     $interval = $transport->diff($max);
    
     if ($interval->h > 2) {
         //
     }
    

    【讨论】:

    • 我现在找到了这个解决方案:stackoverflow.com/questions/6370538/… 我添加了 int() - (int) $interval->format('%h:%i:%s')
    • 谢谢大家!这个解决方案也有效: $interval->format('%h')
    • 使用格式方法,结果将是一个字符串,但我们在比较语句中有整数。它可以工作,但会有不必要的强制转换执行。
    • E 编辑了我的问题并发布了我当前的代码。这种方法在不使用任何格式方法的情况下比较 $transport 和 $max 是否正确? :) 谢谢大家!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多