我有 2 个日期时间,我需要以十进制格式计算它们之间的小时数差异。困难的部分是确保结果将值存储到小数点后两位。
$datetime1 = new DateTime("2017-09-01 23:00:00");
$datetime2 = new DateTime();
$difference = $datetime2->diff($datetime1);
Run Code Online (Sandbox Code Playgroud)
但结果只是一个整数,这对我来说失去了太多的准确性。如何将数值保留到小数点后两位?
DateTime::diff返回DaterInterval每个与时间相关的属性的整数。
该days属性不考虑少于一天的增量,因为它们会累积到较小的属性并从中删除,然后向下舍入。
所以$diff->h永远不会大于23。而 且$diff->s永远$diff->i不会大于59。year其中 days 将包含和属性中的总天数month。不要与 混淆$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
Run Code Online (Sandbox Code Playgroud)
在 php 7.1 中,您还可以microseconds通过添加$diff->f / 3.6e+9.
更简单的方法是减去 unix 时间戳,以检索两个日期之间的总秒数。然后将剩余秒数除以一小时的秒数 (3600)。
示例: https: //3v4l.org/SbjEU
$datetime1 = new DateTime('2017-09-01 23:00:00');
$datetime2 = new DateTime('2017-09-02 01:34:00');
$hours = round(($datetime2->getTimestamp() - $datetime1->getTimestamp()) / 3600, 2);
echo $hours; //2.57
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2634 次 |
| 最近记录: |