【问题标题】:Add hours which are in G:i format php添加 G:i 格式 php 的小时数
【发布时间】:2023-03-13 20:15:02
【问题描述】:

我目前有一个 G:i 格式的时间差异列表。

我想把它们全部加起来,但是当我尝试时它会在 24 处重置为 0。 我怎样才能得到这样的结果:例如 54:45?

提前致谢。

date_default_timezone_set('UTC');
$username = $row['username'];
$begintime = $row['begintime'];
$endtime = $row['endtime'];

$begintime = new DateTime($begintime);
$begintime = $begintime->format('H:i');

$endtime = new DateTime($endtime);
$endtime = $endtime->format('H:i');

$difference = strtotime($endtime) - strtotime($begintime);
$difference = date('G:i', $total);  
$total_hours += $difference;  

【问题讨论】:

  • 显示您的代码。我们可以猜到发生了什么,但在没有看到代码的情况下,这将是在黑暗中的一次尝试。

标签: php date time format hour


【解决方案1】:

不要使用date() 来格式化绝对时间。由于$difference 包含以秒为单位的时间差,因此只需简单的算术即可:

$hours = floor( $difference / 60 / 60 );
$minutes = ( $difference / 60 ) % 60;

echo "$hours:$minutes";  

【讨论】:

  • 这更接近我的答案,但如果我有 2 倍的 2:30 时间怎么办。这不会给我 5:00..
  • 为什么不呢?如果你还在做$total_hours += $difference .. 停止这样做。你应该把时间加起来,然后格式化。
  • 我已经解决了这个问题,方法是将分钟除以 60,然后将其与小时相加,并将其余分钟保留为剩余分钟。谢谢@Juhana
【解决方案2】:

您实际上可以通过将差异添加到任意日期来“欺骗”DateTime 来计算绝对时间:

$foo = new DateTime();
$bar = new DateTime();

foreach ($intervals as $interval) {
    $begin = $interval['begin'];
    $end = $interval['end'];
    $foo->add($begin->diff($end));
}

// Will be the total time of all intervals, as an interval itself
$total = $foo->diff($bar);

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多