PHP5 añadiendo 1 HR a tiempo variables / cálculos en blanco

votos
1

He actualizado recientemente para PHP5, y he noticied que dentro de una aplicación que he construido parece que hay una hora extra añadido a algunos de mis variables y caculations.

Estoy usando:

date_default_timezone_set ( 'Europe / London');

que entiendo que significa que está usando PHP BST comparación con GMT estándar, pero cuando imprimo las variables vacías (devuelto antes de las 00:00 el uso de H: i) - Ahora estoy consiguiendo 01:00.

Cuando caculating la diferencia de horas / minutos entre dos datetimes - Yo también estoy recibiendo una hora extra.

Mi código básico es:

<td><?php if(isset($item->start_time)) { echo date('H:i', strtotime($item->start_time)); } ?></td>
<td><?php if(isset($item->finish_time)) { echo date('H:i', strtotime($item->finish_time)); }?></td>
<td>
     <?php
     $start = strtotime($item->start_time);
     $end = strtotime($item->finish_time);
     $elapsed = $end - $start;
     if($elapsed != NULL) { echo date(H:i, $elapsed); }
     ?>
</td>

Que por ejemplo Rown rendimientos:

Inicio: 08:57 (Basado en $ Item-> hora_inicial como 2011-03-19 08:57:23 en mi DB)

Acabado: 12:59 (Basado en $ Item-> finish_time como 2011-03-19 12:59:38 en mi DB)

Caculation: 05:02 (esto debería ser 4:02)

Publicado el 21/04/2011 a las 10:09
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Pruebe a establecer

date_default_timezone_set('UTC');

inmediatamente antes de la conversión de su tiempo transcurrido hasta H: i formato en el

if($elapsed != NULL) { echo date("H:i", $elapsed); } 

recordando a restablecer de nuevo más tarde

Se está tratando el tiempo transcurrido como un sello de fecha y hora para el formato (eso es lo que la función date () espera) para PHP está siguiendo es el comportamiento estándar y tratándolo como un local con formato de fecha / hora (no apreciar que está siendo utilizado como una transcurrido tiempo), por lo que está añadiendo la hora de mostrar la hora correcta de acuerdo a la configuración de zona horaria.

Respondida el 21/04/2011 a las 13:37
fuente por usuario

votos
1

Usted está tratando la diferencia de tiempo como un punto en el tiempo cuando se utiliza la fecha ( "H: i"). Le sugiero que acaba de calcular la diferencia de tiempo transcurrido manualmente

echo floor( $elapsed / 60) . ":" . ($elapsed % 60)

De lo contrario, que se ejecutará en problemas cuando $ transcurrido es más grande que 24 horas.

Respondida el 21/04/2011 a las 14:08
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more