【问题标题】:How calculate the difference of hours between two dates in PHP? [duplicate]如何计算PHP中两个日期之间的小时差? [复制]
【发布时间】:2015-06-19 12:56:14
【问题描述】:

这对另一个问题来说听起来不太可能。

我有两个小时的范围。

$start = 18:00;
$end = 2:00;

the result 8 hours.

样品二。

$start = 17:30;
$end = 2:00; 

result 7.5 Hours.

我怎样才能在 PHP 代码上得到这个。

【问题讨论】:

  • 将它们转换为DateTime,并减去时间。
  • 我认为第二个例子应该是8.5 hours。对吗?
  • 你的问题解决了吗?

标签: php date datetime dateinterval


【解决方案1】:

面向对象的风格:

<?php
$datetime1 = new DateTime('2015-04-13 18:00');
$datetime2 = new DateTime('2015-04-14 02:00');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%H:%I hours');
?>

程序风格:

<?php
$datetime1 = date_create('2015-04-13 17:30');
$datetime2 = date_create('2015-04-14 02:00');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%H:%I hours');
?>

您可以在以下位置阅读更多信息:

http://php.net/manual/en/datetime.diff.php

http://php.net/manual/en/dateinterval.format.php

http://php.net/manual/en/class.dateinterval.php

【讨论】:

  • DateTime 的使用有点危险:它不是为时间算术设计的(因此得名 - datetime),所以你可能会遇到夏令时问题.
  • @zerkms 您为这些情况推荐了哪些函数?
  • 对于这个特殊的任务,我会手动计算它,这很简单:搜索一个像样的需要更多时间。
  • @zerkms 我不会说这很危险,而是专门为解决此类问题而设计的。重要的是要注意,如果您在一夜之间从 EDT 切换到 EST,那么间隔实际上应该减少一个小时。正确的方法是以 UTC 管理所有时间,或者确保使用第一个 DateTimeZone 显式加载第二个 DateTime。
  • @JoshfromQaribou 当你有日期分数时,你只能推理 EST/EDT。否则DateTime 的行为是不可预测的,因为它假定“今天”。 “正确的方法是在 UTC 中管理所有时间”——问题是关于一天中的时间,这与时区无关。
猜你喜欢
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 2014-03-08
相关资源
最近更新 更多