В моем приложении PHP я хочу рассчитать сумму двух временных переменных. Я ищу что-то вроде этого примера.
$time1 = 15:20:00; $time2 = 00:30:00; $time = $time1+$time2;
Лучший способ сделать это, скорее всего, будет использовать strtotime для преобразования их в метки времени, а затем сложение вместе:
$o = strtotime($time1)+strtotime($time2);
Если я помню, что правильный strtotime
поддерживает этот формат.
В противном случае вам нужно будет отфильтровать его самостоятельно.
Следующий ответ не возвращает правильное значение. Он суммирует целые числа, но не возвращает правильное время.
$ o = strtotime ($ time1) + strtotime ($ time2);
Я создал функцию, чтобы получить расчетное время следующим образом.
public function addTwoTimes($time1 = "00:00:00", $time2 = "00:00:00"){ $time2_arr = []; $time1 = $time1; $time2_arr = explode(":", $time2); //Hour if(isset($time2_arr[0]) && $time2_arr[0] != ""){ $time1 = $time1." +".$time2_arr[0]." hours"; $time1 = date("H:i:s", strtotime($time1)); } //Minutes if(isset($time2_arr[1]) && $time2_arr[1] != ""){ $time1 = $time1." +".$time2_arr[1]." minutes"; $time1 = date("H:i:s", strtotime($time1)); } //Seconds if(isset($time2_arr[2]) && $time2_arr[2] != ""){ $time1 = $time1." +".$time2_arr[2]." seconds"; $time1 = date("H:i:s", strtotime($time1)); } return date("H:i:s", strtotime($time1)); }
Вы можете использовать PHP 5.3 DateInterval
:
$timeInterval = DateInterval::createFromDateString( '15 hours + 20 minutes' ); $timeInterval2 = DateInterval::createFromDateString( '30 minutes' ); foreach( str_split( 'ymdhis' ) as $prop ) { $timeInterval->$prop += $timeInterval2->$prop; } var_dump( $timeInterval->format( '%H:%i:%s' ) );
(Как добавить к объектам DateInterval здесь было объяснено: как мы можем добавить два интервала дат в PHP )
Если ответ, который вы ожидаете, составляет 15:50:00
и вы хотите использовать функции strtotime
и date
, вы должны вычесть секунды $time1
и $time2
при преобразовании их в временные метки unix:
$time1 = '15:20:00'; $time2 = '00:30:00'; $time = strtotime($time1) + strtotime($time2) - strtotime('00:00:00'); $time = date('H:i:s', $time);
Насколько я могу судить, ответ Саммай не помог мне.
Мне нужно было начать то время, которое я хотел добавить с началом отметки времени UNIX. Таким образом, strtotime
возвращает секунды, которые необходимо добавить в первый раз.
$time1 = "15:20:00"; $time2 = "1970-01-01 00:30:00"; $time = strtotime($time1) + (strtotime($time2) + 3600); echo $time . "<br />"; echo date("H:i:s", $time);
Обязательно проконсультируйтесь с мистическими документами http://us1.php.net/strtotime для дополнительных вещей, которые вы можете внести в свои функции 🙂
$today = time(); $tommorrow = strtotime("+1 days", $today); $day_after_tomorrow = strtotime("+1 days", $tomorrow);
Код:
$time1 = '15:20:00'; $time2 = '00:30:00'; $time = strtotime($time1)+strtotime($time2); $sumtime = date("H:i:s",$time);