2011-01-29 15 views

Respuesta

91

No hay necesidad de nada explode:

$str_time = "23:12:95"; 

$str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time); 

sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds); 

$time_seconds = $hours * 3600 + $minutes * 60 + $seconds; 

Y si no desea utilizar expresiones regulares:

$str_time = "2:50"; 

sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds); 

$time_seconds = isset($seconds) ? $hours * 3600 + $minutes * 60 + $seconds : $hours * 60 + $minutes; 
+0

Solución dulce. Pero, ¿no se rompería esto si HH no está presente? – simme

+0

Simplemente lo arreglé para que no lo hiciera. –

+0

¡Qué gran solución! – Ryan

4

En pseudocódigo:

split it by colon 
seconds = 3600 * HH + 60 * MM + SS 
+0

¿Esto es PHP? 8O – Ryan

+6

Como él escribió, es pseudocódigo. "Código de simulación" para explicar cómo se podría hacer algo. – simme

0
<?php 
$time = '21:32:32'; 
$seconds = 0; 
$parts = explode(':', $time); 

if (count($parts) > 2) { 
    $seconds += $parts[0] * 3600; 
} 
$seconds += $parts[1] * 60; 
$seconds += $parts[2]; 
+0

¿Qué pasa si solo fuera 32:32 sin la hora? – Ryan

+1

Entonces no funcionaría. Obviamente necesitas validar el formato primero. Y elimine los primeros $ seconds + = parte – simme

+1

¿Qué tal el array flip $ parts? ¡Soy genial! – Ryan

-3
// HH:MM:SS or MM:SS 
echo substr($time , "-2"); // returns last 2 chars : SS 
5

Prueba esto:

$time = "21:30:10"; 
$timeArr = array_reverse(explode(":", $time)); 
$seconds = 0; 
foreach ($timeArr as $key => $value) 
{ 
    if ($key > 2) break; 
    $seconds += pow(60, $key) * $value; 
} 
echo $seconds; 
+0

¡Me encanta! $ time = "01: 23: 54: 21: 30: 10" me da una respuesta de 1087421410 segundos. –

+2

Pruébalo ahora. Por supuesto, puede pasar algo como "898989: 8989898: 899899", pero supongo que las validaciones básicas se realizarán en el tiempo ingresado antes de que el código llegue al cálculo de segundos. – Chandu

-1
$time="12:10:05"; //your time 
echo strtotime("0000-00-00 $time")-strtotime("0000-00-00 00:00:00"); 
82

creo que el método más fácil sería utilizar strtotime() función:

$time = '21:30:10'; 
$seconds = strtotime("1970-01-01 $time UTC"); 
echo $seconds; 

// same with objects (for php5.3+) 
$time = '21:30:10'; 
$dt = new DateTime("1970-01-01 $time", new DateTimeZone('UTC')); 
$seconds = (int)$dt->getTimestamp(); 
echo $seconds; 

demo


Función date_parse() también se puede utilizar para la fecha y la hora de análisis:

$time = '21:30:10'; 
$parsed = date_parse($time); 
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second']; 

demo


Si va a analizar formato MM:SS con strtotime() o date_parse() se producirá un error (date_parse() se utiliza en strtotime() y DateTime), porque cuando ingresa un formato como xx:yy, el analizador asume que es HH:MM y no MM:SS. Sugeriría verificar el formato, y anteponer 00: si solo tiene MM:SS.

demostrtotime()demodate_parse()


Si tiene horas más que 24, entonces se puede utilizar la siguiente función (que funcionará para MM:SS y HH:MM:SS formato):

function TimeToSec($time) { 
    $sec = 0; 
    foreach (array_reverse(explode(':', $time)) as $k => $v) $sec += pow(60, $k) * $v; 
    return $sec; 
} 

demo

+2

¡Gracias! Por cierto: ¡buen formato de enlaces! –

+1

'strtotime()' no permite que las horas vayan más allá de 24 - con 25 o más se devolverá "falso". – Sven

+0

@Sven: Actualicé la respuesta. –

1

simple

function timeToSeconds($time) 
{ 
    $timeExploded = explode(':', $time); 
    if (isset($timeExploded[2])) { 
     return $timeExploded[0] * 3600 + $timeExploded[1] * 60 + $timeExploded[2]; 
    } 
    return $timeExploded[0] * 3600 + $timeExploded[1] * 60; 
} 
1
$time = 00:06:00; 
    $timeInSeconds = strtotime($time) - strtotime('TODAY'); 
0

Puede utilizar la función strtotime para devolver el número de segundos desde today 00:00:00.

$seconds= strtotime($time) - strtotime('00:00:00'); 
+1

Si bien este fragmento de código puede resolver la pregunta, [incluyendo una explicación] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) realmente ayuda a mejorar la calidad de su publicación.Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. Por favor, intente no saturar su código con comentarios explicativos, ¡esto reduce la legibilidad tanto del código como de las explicaciones! –

Cuestiones relacionadas