我有2个DateTimes,我需要以小时格式以十进制格式计算它们之间的差异。困难的部分是确保结果将值存储到2位小数。
$datetime1 = new DateTime("2017-09-01 23:00:00");
$datetime2 = new DateTime();
$difference = $datetime2->diff($datetime1);
但结果只是一个整数,对我来说失去了太多准确性。如何将值保持为2位小数?
答案 0 :(得分:2)
DateTime::diff
会返回DaterInterval
,其中包含每个与时间相关的属性的整数。
days
属性不会考虑小于一天的增量,因为它们会累积到较小属性并从较小属性中删除,然后向下舍入。
所以$diff->h
永远不会超过23
。虽然$diff->s
和$diff->i
永远不会超过59
。天数将包含year
和month
属性中的总天数。不要与$diff->d
混淆,后者是增量天数。
为了确定使用diff的总小时数,您只需要对每个属性执行数学运算以检索属性的小时数。
$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' );