PHP:以小时、分钟和秒为单位获取两个 DateTime 对象之间的差异

标签 php datetime

我正在尝试计算一个人在给定日期的工作小时数。为此,我需要获取两个 DateTime 对象之间的时、分和秒差值。到目前为止,我可以像这样成功地做到这一点

        $timeIn        = new DateTime($time['timeIn']);
        $timeOut       = new DateTime($time['timeOut']);
        $time['hours'] = date_diff($timeIn, $timeOut) -> format("%H:%i:%s");

这似乎工作正常,直到我放入一个员工忘记下类的测试用例。现在,让我们说

$timeIn  = '2016-09-28 14:26:17'
$timeOut = '2016-09-30 09:53:53'

在这种情况下,差异应该是 43:27:36(因为 timeIn 和 timeOut 之间有超过一天的时间)。相反,我得到 19:27:36(就好像它只是截断休息日并返回其余部分一样)。我怎样才能将那一天添加到小时而不是截断它? (我希望得到 43:27:36,而不是 1 天、19 小时等。所以我试图在 HH:MM:SS 中得到答案)

最佳答案

正如 Scott 所建议的,但稍作调整,我们需要自己格式化它,但我们有漂亮的 sprintf 来帮助:

$start = new \DateTime("2016-09-28 14:26:17");
$end   = new \DateTime("2016-09-30 09:53:53");

$interval = $end->diff($start);

$time = sprintf(
    '%d:%02d:%02d',
    ($interval->d * 24) + $interval->h,
    $interval->i,
    $interval->s
);

关于PHP:以小时、分钟和秒为单位获取两个 DateTime 对象之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39795305/

相关文章:

php - Strtotime 返回错误的时间值 - 自己增加 8 分钟?

php - 如何增加mysql列中的数字

php - 如何从 php/mysql 的日期时间中减去日期?

Python:如何将日期时间添加到 pcolormesh 中的 x 轴

java - hibernate + spring boot store date on UTC time zone 麻烦

javascript - 如何在 vuejs 组件中使用 laravel csrf token

php - Laravel Carbon 本地化不起作用(从数字中获取本地化的月份名称)

python - pandas 数据透视表(按周、年)

javascript - date.setHours() 不起作用

php - CMS 数据库架构