【问题标题】:How to addition of multiple hour in php in HH:MM format如何在 HH:MM 格式的 php 中添加多个小时
【发布时间】:2015-01-24 19:09:13
【问题描述】:

我有以下数组。

Array
(
    [0] => 25:50
    [1] => 21:00
    [2] => 42:40
)

我正在尝试在 php 中添加小时数,我尝试了以下代码。但它让我错误的时间计算。

$time_cal = 0;
foreach ($time as $time_cal) {
    $time_cal += strtotime($time_cal);
}
echo date('H:i', strtotime($time_cal));

这个 strtotime 函数背后的原因是只给出 24 小时内的时间计算,这是正确的,但是当我尝试超过 24 小时(如 25:55、44:44)时,我的计算结果是错误的。

有什么想法吗?

【问题讨论】:

  • 我不确定是否完全理解了这个问题。你有一个数组 ($time),你想总结它的元素?
  • 有 $time 数组,在 hh:mm 中,需要把小时和分钟全部加起来
  • 好的,请给我一些时间来建立答案。
  • 既然这些字符串是经过时间的,为什么不直接解析小时数并将它们相加。分析分钟并加起来。对分钟取模 60 以获得准确的分钟数。除以 60 得到额外的小时数。

标签: php


【解决方案1】:

这段代码可能对你有帮助..我创建了两个函数 1) 爆炸时间 2) second_to_hhmm

function explode_time($time) { //explode time and convert into seconds
        $time = explode(':', $time);
        $time = $time[0] * 3600 + $time[1] * 60;
        return $time;
}

function second_to_hhmm($time) { //convert seconds to hh:mm
        $hour = floor($time / 3600);
        $minute = strval(floor(($time % 3600) / 60));
        if ($minute == 0) {
            $minute = "00";
        } else {
            $minute = $minute;
        }
        $time = $hour . ":" . $minute;
        return $time;
}

$time = 0;
$time_arr =  array("23:59","01:01","2:50");
 foreach ($time_arr as $time_val) {
    $time +=explode_time($time_val); // this fucntion will convert all hh:mm to seconds
}

echo second_to_hhmm($time); // this function will  convert all seconds to HH:MM.

【讨论】:

    【解决方案2】:

    你可以用这个。

    $remove_mins = date('H', strtotime( $time_to_add));
    $time_cal = 0;
    foreach ($time as $time_cal) {
        $time_cal = date('H:i', strtotime("+" . $remove_mins . " hour",strtotime( $time_cal)));
    }
    echo date('H:i', strtotime($time_cal));
    

    当超过 24 小时时,如果尝试添加分钟,+hour 功能将不起作用,因此您只需要获取小时数而不需要分钟数

    【讨论】:

      【解决方案3】:
      function AddTimeToStr($aElapsedTimes) {
        $totalHours = 0;
        $totalMinutes = 0;
      
        foreach($aElapsedTimes as $time) {
          $timeParts = explode(":", $time);
          $h = $timeParts[0];
          $m = $timeParts[1];
          $totalHours += $h;
          $totalMinutes += $m;
        }
      
        $additionalHours = floor($totalMinutes / 60);
        $minutes = $totalMinutes % 60;
        $hours = $totalHours + $additionalHours;
      
        $strMinutes = strval($minutes);
        if ($minutes < 10) {
            $strMinutes = "0" . $minutes;
        }
      
        $strHours = strval($hours);
        if ($hours < 10) {
            $strHours = "0" . $hours;
        }
      
        return($strHours . ":" . $strMinutes);
      }
      
      // your sample
      echo AddTimeToStr(array("25:50", "21:00", "42:40")) . "<br/>";
      
      // more flexibility. Lets you specify more than 99 hours
      echo AddTimeToStr(array("100:50", "00:05", "22:40")) . "<br/>";
      
      // check before, at, after hour boundaries
      echo AddTimeToStr(array("00:50", "00:09")) . "<br/>";
      echo AddTimeToStr(array("00:50", "00:10")) . "<br/>";
      echo AddTimeToStr(array("00:50", "00:11")) . "<br/>";
      

      【讨论】:

        【解决方案4】:

        获取时间:

        substr($time_cal,0,2);
        

        获取会议记录:

        substr($time_cal,3,2);
        

        然后转换为数字,因为它是一个字符串

        【讨论】:

          【解决方案5】:

          您可以使用DateTime 对象对日期进行操作

          $dates = array("21:00", "01:05", "03:00");
          $sum = new DateTime("00:00");
          
          foreach($dates as $date)
          {
              $elements = explode(':',$date);
              $hours = (string)((int)$elements[0]);
              $minutes = (string)((int)$elements[1]);
          
              $dv = new DateInterval('PT'.$hours.'H'.$minutes.'M');
              $sum->add($dv);
          }
          
          echo $sum->format('H:i');
          

          这将输出01:05,因为它会自动以小时为模。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-04-25
            • 2019-09-27
            • 2014-01-27
            • 2023-03-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多