Php 以小时为单位的十进制格式的两个日期时间之间的差异
我有2个日期时间,我需要以十进制格式计算它们之间的差异,以小时为单位。困难的部分是确保结果将值存储到小数点后2位Php 以小时为单位的十进制格式的两个日期时间之间的差异,php,time,Php,Time,我有2个日期时间,我需要以十进制格式计算它们之间的差异,以小时为单位。困难的部分是确保结果将值存储到小数点后2位 $datetime1 = new DateTime("2017-09-01 23:00:00"); $datetime2 = new DateTime(); $difference = $datetime2->diff($datetime1); 但结果只是一个整数,这对我来说失去了太多的准确性。如何将该值保留为小数点后2位?2位小数: $datetime1 = new Dat
$datetime1 = new DateTime("2017-09-01 23:00:00");
$datetime2 = new DateTime();
$difference = $datetime2->diff($datetime1);
但结果只是一个整数,这对我来说失去了太多的准确性。如何将该值保留为小数点后2位?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' );
小数点后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' );
DateTime::diff
返回每个与时间相关的属性的整数
天
属性不考虑小于一天的增量,因为它们累积到较小的属性并从中移除,然后向下舍入
所以$diff->h
永远不会大于23
。而$diff->s
和$diff->i
永远不会大于59
。其中天将包含年
和月
属性内的总天数。不要与$diff->d
混淆,后者是天数的增量
为了使用diff确定总小时数,只需对每个属性执行数学运算即可检索属性的小时数
例如:
在PHP7.1中,您还可以通过添加$diff->f/3.6e+9
来计算微秒
更简单的方法是减去unix时间戳,以检索两个日期之间的总秒数。然后将剩余的秒数除以一小时内的秒数(3600)
例如:
DateTime::diff
返回每个与时间相关的属性的整数
天
属性不考虑小于一天的增量,因为它们累积到较小的属性并从中移除,然后向下舍入
所以$diff->h
永远不会大于23
。而$diff->s
和$diff->i
永远不会大于59
。其中天将包含年
和月
属性内的总天数。不要与$diff->d
混淆,后者是天数的增量
为了使用diff确定总小时数,只需对每个属性执行数学运算即可检索属性的小时数
例如:
在PHP7.1中,您还可以通过添加$diff->f/3.6e+9
来计算微秒
更简单的方法是减去unix时间戳,以检索两个日期之间的总秒数。然后将剩余的秒数除以一小时内的秒数(3600)
例如:
您使用的是哪个PHP版本?我假设5.x
,但由于DateTime
对象发生了更改,因此会对答案有所帮助。另外,任何关于您希望通过精度/最终结果实现什么的上下文也会很有帮助。您使用的是哪个PHP版本?我假设5.x
,但由于DateTime
对象发生了更改,因此会对答案有所帮助。此外,任何关于您希望通过精度/最终结果完成的内容的上下文也会有所帮助。无论哪种方法都有效,您还可以使用DatePeriod
检索两个日期之间的秒数并执行相同的操作。无论采用哪种方法,都可以使用DatePeriod
检索两个日期之间的秒数并执行相同的操作。作为提示,当前方程将导致负值。较晚的日期操作数应位于较早的日期操作数之前,以检索正值。像这样:$diff=$epoch2-$epoch1代码>作为提示,当前方程式将产生负值。较晚的日期操作数应位于较早的日期操作数之前,以检索正值。像这样:$diff=$epoch2-$epoch1代码>
$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