我有2个日期时间,我需要计算它们之间的差值,小时格式为,格式为。困难的部分是确保结果将值存储到2个小数位。小数格式的2个日期时间之间的差异
$datetime1 = new DateTime("2017-09-01 23:00:00");
$datetime2 = new DateTime();
$difference = $datetime2->diff($datetime1);
但结果只是一个整数,对我来说失去了太多的准确性。如何将值保留到2位小数?
我有2个日期时间,我需要计算它们之间的差值,小时格式为,格式为。困难的部分是确保结果将值存储到2个小数位。小数格式的2个日期时间之间的差异
$datetime1 = new DateTime("2017-09-01 23:00:00");
$datetime2 = new DateTime();
$difference = $datetime2->diff($datetime1);
但结果只是一个整数,对我来说失去了太多的准确性。如何将值保留到2位小数?
DateTime::diff
回报DaterInterval
有相关财产每一个人的时间整数。
days
属性没有考虑小于一天的增量,因为它们累计到较小的属性并从中移除,然后向下舍入。
所以$diff->h
永远不会大于23
。虽然$diff->s
和$diff->i
永远不会大于59
。日期将包含year
和month
属性中的总天数。不要与$diff->d
混淆,这是增量天数。
为了确定使用差异的总小时数,您只需对每个属性执行数学运算以检索属性的小时数。
$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+9
占microseconds
。
如何添加秒,然后除以'3600'?请参阅https://3v4l.org/N9lQq。 – localheinz
无论哪种方式,人们也可以使用'DatePeriod'来检索两个日期之间的秒数并执行相同的操作。 https://3v4l.org/P0kJG – fyrye
在互联网上的最佳解释,谢谢! –
小数点后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');
你使用哪个PHP版本?我假设'5.x',但会因'DateTime'对象的变化而有助于答案。此外,关于您想要用精度/最终结果完成的任何背景也会有所帮助。 – fyrye