【问题标题】:PHP - how to add different timesPHP - 如何添加不同的时间
【发布时间】:2017-05-09 02:09:35
【问题描述】:

我想要 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" 是上述代码的答案。我不想使用任何可以添加时间的用户定义函数。谁能帮帮我?

【问题讨论】:

  • 您想要时间还是总小时数和分钟数?
  • 总小时数和分钟数。
  • 我不确定是否有内置方法。但是计算总时间有什么问题呢?
  • 我在某处读到,计算总时间不是一个好方法,有一些方法可以得到时间的总和,但我不知道那种方法。

标签: php


【解决方案1】:

您需要总时间和小时数,因此无需使用 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');

【讨论】:

  • 我不想使用任何可以添加时间的用户定义函数.
  • @SougataBose。是的,我在问题上阅读了它,但没有任何方法我花了很多时间来研究这个逻辑,但不可能有这么多的可能性,比如当天变化等。所以根据我的知识,上述解决方案是解决方案跨度>
【解决方案2】:

如果您不想使用用户定义的逻辑,您唯一的选择是使用内置函数 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);

Bhavin提供的逻辑也不错。如果您对此感到满意,则可以这样做。这取决于你。

演示

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

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

【讨论】:

    【解决方案3】:

    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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      相关资源
      最近更新 更多