PHP - 如何添加不同的时间

时间:2016-12-23 11:06:38

标签: php

我想要3次不同的时间。

前:

h1 = "04:23";
h2 = "04:16";
h3 = "00:00";

所以答案应该是$hours = "08:39"

我已经搜索了这个并得到了很多解决方案但没有得到正确答案。

这是我的代码:

$hours = strtotime($h1) + strtotime($h2) + strtotime($h3);
$total_hours = date("H:i", intval($hours));
echo $total_hours;

"00:00"是上面代码的答案。我不想使用任何可以添加时间的用户定义函数。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:4)

您需要总时间和小时,因此无需使用strtotime或date()方法。 此解决方案没有任何内置方法。 我总是使用这个解决方案。

解决方案的工作演示:https://eval.in/98249

function sum_time() {
  $i = 0;
  foreach (func_get_args() as $time) {
    sscanf($time, '%d:%d', $hour, $min);
    $i += $hour * 60 + $min;
  }
  if ($h = floor($i / 60)) {
    $i %= 60;
  }
  return sprintf('%02d:%02d', $h, $i);
}

echo sum_time('04:23', '04:16', '00:00');

答案 1 :(得分:0)

如果您不想使用用户定义的逻辑,您唯一的选择是根据我的意见使用strtotime的内置函数。但是您需要为strtotime函数提供正确的格式,例如00:04:16。我已经提供了我的逻辑来为您提供解决方案。

$h1 = "04:23";
$h2 = "04:16";
$h3 = "00:00";

$h_arr = array($h1, $h2, $h3);

function sum_time($h_arr) {
    $hours = 0;
    $minutes = 0;
    foreach($h_arr as $value) {
        $value_explode = explode(':', $value);
        $hours += $value_explode[0];
        $minutes += $value_explode[1];
        if($minutes > 60) {
            $hours += 1;
            $minutes = $minutes % 60;
        }
    }

    return sprintf('%02d:%02d', $hours, $minutes);
}

echo sum_time($h_arr);

Bh​​avin 提供的逻辑也很好。如果你对它感到满意,你可以去做。它取决于你。

<强>演示

使用您的测试用例 - https://eval.in/703528

其他测试用例 - https://eval.in/703529

答案 2 :(得分:0)

Bhavin和Perumal93回答工作正常。但我正在以不同的方式思考。我想尽可能简单地做到这一点。代码如下所示:

<?php
/**
 * @param array $times
 * @return string
 */
function sumOfDiffrentTime($times = array())
{
    $minutes = '';
    // loop through all the times array
    foreach ($times as $time) {
        list($hour, $minute) = explode(':', $time);
        $minutes += $hour * 60;
        $minutes += $minute;
    }
    $hours = floor($minutes / 60);
    $minutes -= $hours * 60;

    // returns the  formatted time
    return sprintf('%02d:%02d', $hours, $minutes);
}

$times = array();

$times[] = "04:23";
$times[] = "04:16";
$times[] = "00:00";

// pass your $times array to the function
echo sumOfDiffrentTime($times);

LIVE DEMO

希望它会对你有所帮助。