У меня есть следующий массив.
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, это дало мне неправильный расчет.
Есть идеи ?
Этот код может помочь вам. Я создал две функции: 1) explode_time 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.
вы можете использовать это.
$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 часов, функция «+ час» не работает, если вы пытаетесь добавить минуты, так что вам просто нужно получить количество часов без количества минут
Вы можете использовать объект 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
потому что оно автоматически делает по модулю часы.
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/>";
Чтобы получить часы:
substr($time_cal,0,2);
Чтобы узнать минутку:
substr($time_cal,3,2);
Затем преобразуйте в числа, поскольку это строка