我正在制作订单列表。每个订单都有一个日期时间列。我想做的是从当前时间减去订单日期时间以获得差异。我试着跟随
数据是对象的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