【问题标题】:PhP Date and Time separation, addition and calculationPhP 日期和时间的分离、加法和计算
【发布时间】:2021-02-24 14:57:25
【问题描述】:

另一个日期时间问题。

我有一段时间有些事情很忙,比如 -> "2021-02-24 12:00:00"(string)

我有这样的当前日期 -> date('Y-m-d h:i:s') (string)

我需要计算两者之间经过了多少小时:分钟:秒。例如(忙于)2021-02-14 15:00:00 当前时间是 2021-02-14 16:15:00 所以我需要显示类似这样的内容:01:15:00。

但是如果超过 99 小时过去了,我该如何让它看起来像这样 -> 120:02:36。

我昨天问的问题不够具体,所以我在这里得到了一些答案: (我知道这是我的错)

PhP date time addition

但最后我不能用它来解决这个问题。

【问题讨论】:

  • 在哪两个之间?请分享更多详细信息,以及您解决问题的尝试

标签: php calculation


【解决方案1】:

如果您将日期转换为时间戳,则可以使用 https://stackoverflow.com/a/3172368/1213708 之类的内容将时间分解为小时/分钟/秒。

sprintf() 只是用 2 位数的分钟和秒来格式化日期的一种方式...

$inputDate = new DateTime("2021-02-22 12:00:00");
$nowDate = new DateTime();

$interval = abs($inputDate->getTimeStamp() - $nowDate->getTimeStamp());
$hours = floor($interval / 3600);
$minutes = floor(($interval / 60) % 60);
$seconds = $interval % 60;

echo sprintf("%d:%02d:%02d", $hours, $minutes, $seconds);

作为输出(最近)...

51:22:01

【讨论】:

  • 为什么不使用 date_diff?如果时间变化(夏令时/冬季时间)在时间间隔内,则通过时间戳得到的结果不会提供预期的结果。
  • @jspit 因为它提供了一个 DateInterval 来分隔天/小时,这将是乘以天并将它们添加到小时的情况。这是一个替代方案。
【解决方案2】:

DateTime extension dt 有一个特殊的方法来解决这个问题:diffFormat()。

echo dt::create('2021-02-22 12:00:00')->diffFormat("Now","%G:%I:%S");

几分钟前的输出:

55:52:36

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多