2012-07-30 25 views
5

En mi aplicación de PHP quiero calcular la suma de dos variables de tiempo. Estoy buscando algo como este ejemplo.PHP sumar dos variables de tiempo

$time1 = 15:20:00; 
$time2 = 00:30:00; 
$time = $time1+$time2; 
+4

¿Cómo ha intentado hacer esto? – Fluffeh

+1

¿Tiene algunos ejemplos de cómo deberían ser sus resultados? – Pete

+1

DateTime y DateInterval classes. http://www.php.net/manual/en/book.datetime.php – dnagirl

Respuesta

3

La mejor manera de hacer esto es más probable que utilice strtotime para convertirlos en marcas de tiempo y luego hacer la totalización:

$o = strtotime($time1)+strtotime($time2);

Si recuerdo bien strtotime ¿son compatibles con este formato.

De lo contrario, tendrá que filtrarlo usted mismo.

+0

El resultado debe agregar la hora actual + una variable de tiempo que estoy tomando de DB decir $ tim2 – Rakesh

+0

'time() + strtotime ($ mysql_date); 'funciona – Sammaye

+0

$ time = date (" H: i: s ") + strtotime ($ mysql_time); quieres decir de esta manera ..? – Rakesh

-1

Código:

$time1 = '15:20:00'; 
$time2 = '00:30:00'; 
$time = strtotime($time1)+strtotime($time2); 
$sumtime = date("H:i:s",$time); 
+0

Hola sumesh cómo agregar la hora actual + $ time2 ..? – Rakesh

+0

Este debería devolver '15: 50: 00' pero devuelve' 09: 21: 44' –

+0

¿Lo han intentado? – Kashyap

2

Se podría utilizar el 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')); 

(¿Cómo añadir a los objetos DateInterval se explicó aquí: How we can add two date intervals in PHP)

0

Por lo Puedo decir que la respuesta de Sammaye no funcionó para mí.

Necesitaba comenzar la hora que quería agregar con el comienzo de la marca de tiempo de UNIX. De esta forma, strtotime devuelve los segundos que deben agregarse por primera vez.

$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); 
0

Asegúrese de consultar los documentos místicos http://us1.php.net/strtotime cosas adicionales que pueden ingresarse en sus funciones :)

$today = time(); 
$tommorrow = strtotime("+1 days", $today); 
$day_after_tomorrow = strtotime("+1 days", $tomorrow); 
3

Si la respuesta que esperas es 15:50:00 y desea utilizar strtotime y date funciones, necesita restar los segundos $time1 y $time2 compartir cuando los transforma en marcas de tiempo de Unix:

$time1 = '15:20:00'; 
$time2 = '00:30:00'; 
$time = strtotime($time1) + strtotime($time2) - strtotime('00:00:00'); 
$time = date('H:i:s', $time); 
+2

Esto es genial y simple, pero sería más relevante si puede proporcionar más explicaciones sobre la resta de ese valor 0 de tiempo. – rhavendc

4

La siguiente respuesta no devuelve el valor correcto. Se suman enteros pero no se devuelve la hora correcta.

$ o = strtotime ($ time1) + strtotime ($ time2);

Creé una función para calcular el tiempo de la siguiente manera.

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)); 
    } 
+0

Sí, su escenario era un poco más complejo y requería más uso de strototime – Sammaye

+0

Sí. Es verdad. Podemos usar este tipo de solución hasta encontrar un mejor enfoque para resolver eso – cha