2011-05-18 14 views
10

cuál es la mejor manera de convertir 24 horas de tiempo de segundos para que pueda ser utilizado para la comparación sentencia if ..Convertir a segundos

function HourMinuteToDecimal($hour_minute) { 
     $t = explode(':', $hour_minute); 
     return $t[0] * 60 + $t[1]; 
} 

echo HourMinuteToDecimal("23:30"); 
return 1410 

Si intenta convertir el tiempo de la medianoche (00:00) al segundo , no funcionará. ¿Cuál es la solución a esto?

00:00, 00:30, 01:00, 01:30, etc.

if (HourMinuteToDecimal("01:30") > HourMinuteToDecimal("23:30")) { .. } 

Esto no funcionará.

+3

cuando dices que convertir '00: 00 'no funcionará, ¿qué quieres decir? Dará como resultado cero segundos, pero eso es correcto ¿no? Si quiere que 00:00 signifique 24 horas en lugar de cero horas, tendrá que convertirlo en un caso especial. – Spudley

+0

Eso es cierto, cuando dices caso especial ... ¿como qué? Tengo un código como este: if (HourMinuteToDecimal ("01:30")> HourMinuteToDecimal ("23:30")) {..} Eso no funcionará como se esperaba ... ¿Cómo solucionar este problema? – user622378

+2

@ user622378: Para resolver el "problema", debe indicar cuál es el problema. Dijiste "esto no funcionará" y "eso no funcionaría como se esperaba", pero no sigas diciendo "por qué". No veo un problema aquí. –

Respuesta

6

Convertir función:

function hoursToSecods ($hour) { // $hour must be a string type: "HH:mm:ss" 

    $parse = array(); 
    if (!preg_match ('#^(?<hours>[\d]{2}):(?<mins>[\d]{2}):(?<secs>[\d]{2})$#',$hour,$parse)) { 
     // Throw error, exception, etc 
     throw new RuntimeException ("Hour Format not valid"); 
    } 

     return (int) $parse['hours'] * 3600 + (int) $parse['mins'] * 60 + (int) $parse['secs']; 

} 

Comentario sobre la marcha, sin probados :-P

es así, puede utilizar strtotime para convertir el formato de fecha en la marca de tiempo Unix y Comparte utilizando un standar operadores (== <>> = = = <, etc.) ex:

$t1 = "23:40:12"; 
$t2 = "17:53:04"; 

$h1 = strtotime("0000-00-00 $t1"); 
$h2 = strtotime("0000-00-00 $t2"); 

$h1 == $h2; // if are equals 
$h1 > $h2; // if h1 is mayor at h2 
$h1-$h2; // dieference in seconds, etc. 

etc ..

+0

$ t1 = hoursToSecods ("00:00:00"); no funcionaría. 00:00:00 es mightnight 12am – user622378

+1

sí, pero si lees la pregunta; "¿Cuál es la mejor manera de convertir 24 horas de tiempo a segundos para que pueda ser utilizado para la comparación si la declaración ...", el 00:00:00 es un 0 segundos pasado del día. – Exos

0

Puede comparar objetos del tipo time utilizando los operadores estándar <, >, ==. Use strtotime para convertir el hilo a tiempo, luego compare.

+0

No estoy seguro de lo que quiere decir con objetos de tipo tiempo. Los tiempos se almacenan en la base de datos usando el tipo de campo 'tiempo'. 17:00:00, 178: 00: 00, 00:00:00, 01:00:00, etc. – user622378

+0

Cuando carga valores de tiempo de la base de datos, serán cadenas. Use 'strtotime' para convertir esas cadenas a veces. –

+0

No creo que debamos llevar marcas de tiempo de UNIX. No estamos lidiando con fechas. –

4

Pareces estar preguntando cosas contradictorias.

  • Quiere convertir un tiempo en HH:MM en segundos.
  • Pero luego quiere "comparar" el resultado de diferentes momentos, como si tuvieran fechas adjuntas.

Si desea permitir HourMinuteToDecimal("01:30") > HourMinuteToDecimal("23:30") para ser verdad sin una fecha, entonces, bueno, cualquier comparación volverá true.

Si desea hacer esto correctamente, incluya la fecha (YYYY-MM-DD HH:MM:SS) y use strtotime en PHP para obtener el número de segundos desde la época UNIX.


Además, su función devuelve minutos, no segundos.

+0

¿Cómo puedo incluir YYYY-MM-DD? Ya tengo más de 8,000 filas de tiempo sin fecha. Entonces, ¿23:30 sería 2011-05-18 23:30:30 y 00:00 es 2011-05-19 00:00:00? – user622378

+0

@ user622378: ¿Cómo se supone que su código adivina de qué día es el momento? ¿O pretendes usar "ahora" como punto de pivote? –

+0

Ejemplo: $ nowTime = HourMinuteToDecimal (date ('H: i')); $ OpenTime = HourMinuteToDecimal ($ data ['Result'] [$ key] ['opentime']); if ($ nowTime> $ OpenTime) {..} Funciona, pero no cuando el tiempo sobre 00:00 – user622378

10

PHP5.3

$formattedTime = '00:01:38'; 
$seconds = strtotime('1970-01-01 ' . $formattedTime . 'GMT') 
+0

¿Cuál es el punto de 1970 en esto? –

+0

@MuhammadbinYusrat https://en.wikipedia.org/wiki/Unix_time –

Cuestiones relacionadas