用于计算foreach项的时间差的函数会得到相同的数据


function for calculating time difference on foreach item results same data

我正在制作订单列表。每个订单都有一个日期时间列。我想做的是从当前时间减去订单日期时间以获得差异。我试着跟随

数据是对象的PDO结果

<?php
$order = new Order();
$elapsedTime = new Order();
foreach ($order->data() as $key=>&$orderItem) {
//get time diffrence                            
$time1 = strtotime(date("Y-m-d H:i")); //now
$time2 = date('H:i', strtotime($orderItem->orderdate));
echo '
<tr id="row' . $orderItem->orderid . '">
<td class="hidden-md hidden-sm hidden-xs center">' . $orderItem->orderid . '</td>
<td>
' . $elapsedTime->getElapsedTime($time1,$time2) . '
</td>
<td class="center"><B>' . date('d/m H:i', strtotime($orderItem->orderdate)) . '</B></td>
</tr>
';
    }
?>

和方法

    public function getElapsedTime($time1, $time2) {
    $diff = $time1 - $time2;
    if($diff){
    return 'Diff: '.date('H:i', $diff);
    }else{
    return 'No Diff.';
    //date('Y-m-d H:i',$diff);
    }
    return false;
}

但出于某种原因,我得到了完全相同的结果。。但是当我只是回显$orderItem->orderdate时,所有日期都不同

尝试将您的函数代码替换为:

$start_date = new DateTime($time1);
$end_date = new DateTime($time2);
$interval = $start_date->diff($end_date);
return $interval->format('%a');

正如@Barmar所说,$time2是一个字符串,所以代码中的第7行应该从改为

$time2 = date('H:i', strtotime($orderItem->orderdate));

至:

$time2 = strtotime($orderItem->orderdate);
$time1 = strtotime(date("Y-m-d H:i")); //now
$time2 = date('H:i', strtotime($orderItem->orderdate));

$time1是时间戳(int),而$time2是字符串。因此,当稍后计算$diff时,您可以从整数中减去一个字符串,这会产生意想不到的结果。

最好将两个时间戳都保持为整数,这样以后就可以相互减去它们:

$time1 = time(); // No need for date/strtotime here
$time2 = strtotime($orderItem->orderdate); // Keep the timestamp as int