2017-09-02 104 views
0

我有2个日期时间,我需要计算它们之间的差值,小时格式为,格式为。困难的部分是确保结果将值存储到2个小数位。小数格式的2个日期时间之间的差异

$datetime1 = new DateTime("2017-09-01 23:00:00"); 
$datetime2 = new DateTime(); 
$difference = $datetime2->diff($datetime1); 

但结果只是一个整数,对我来说失去了太多的准确性。如何将值保留到2位小数?

+0

你使用哪个PHP版本?我假设'5.x',但会因'DateTime'对象的变化而有助于答案。此外,关于您想要用精度/最终结果完成的任何背景也会有所帮助。 – fyrye

回答

2

DateTime::diff回报DaterInterval有相关财产每一个人的时间整数。

days属性没有考虑小于一天的增量,因为它们累计到较小的属性并从中移除,然后向下舍入。

所以$diff->h永远不会大于23。虽然$diff->s$diff->i永远不会大于59。日期将包含yearmonth属性中的总天数。不要与$diff->d混淆,这是增量天数。

为了确定使用差异的总小时数,您只需对每个属性执行数学运算以检索属性的小时数。

示范:https://3v4l.org/KhBQC

$datetime1 = new DateTime('2017-09-01 23:00:00'); 
$datetime2 = new DateTime('2017-09-02 01:34:00'); 
$diff = $datetime2->diff($datetime1); 
$hours = round($diff->s/3600 + $diff->i/60 + $diff->h + $diff->days * 24, 2); 
echo $hours; //2.57 

在PHP 7.1,你也可以通过添加$diff->f/3.6e+9microseconds

+0

如何添加秒,然后除以'3600'?请参阅https://3v4l.org/N9lQq。 – localheinz

+0

无论哪种方式,人们也可以使用'DatePeriod'来检索两个日期之间的秒数并执行相同的操作。 https://3v4l.org/P0kJG – fyrye

+0

在互联网上的最佳解释,谢谢! –

1

小数点后2位:

$datetime1 = new DateTime("2017-09-01 23:00:00"); 
$datetime2 = new DateTime(); 

$epoch1 = $datetime1->getTimestamp(); 
$epoch2 = $datetime2->getTimestamp(); 

$diff = $epoch1 - $epoch2; 

echo number_format($diff/3600, '2');