以小数格式表示的2个日期时间之间的差异

时间:2017-09-02 04:37:32

标签: php time

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

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

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

2 个答案:

答案 0 :(得分:2)

DateTime::diff会返回DaterInterval,其中包含每个与时间相关的属性的整数。

days属性不会考虑小于一天的增量,因为它们会累积到较小属性并从较小属性中删除,然后向下舍入。

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

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

示范: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中,您还可以通过添加microseconds来解释$diff->f / 3.6e+9

答案 1 :(得分: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' );