PHP5 aggiungendo 1 HR a vuoto di tempo variabili / calcoli

voti
1

Recentemente ho aggiornato a PHP5, e hanno noticied che all'interno di un'applicazione Ho costruito sembra che ci sia un'ora in più aggiunto ad alcuni dei miei variabili e caculations.

Sto usando:

date_default_timezone_set ( 'Europe / London');

che capisco significa che PHP sta usando BST contrario di standard di GMT, ma quando stampo variabili vuote (restituito prima come 00:00 con H: i) - ora sto ricevendo 01:00.

Quando caculating l'/ min differenza ora tra due datetimes - Sto anche ricevendo un'ora in più.

Il mio codice di base è:

<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>

Che per un esempio Rown rendimenti:

Inizio: 08:57 (Basato su $ item-> start_time come 2011-03-19 08:57:23 nel mio DB)

Finitura: 12:59 (Basato su $ item-> finish_time come 2011-03-19 12:59:38 nel mio DB)

Caculation: 05:02 (questo dovrebbe essere 4:02)

È pubblicato 21/04/2011 alle 10:09
fonte dall'utente
In altre lingue...                            


2 risposte

voti
0

provare a impostare

date_default_timezone_set('UTC');

subito prima di convertire il tempo trascorso a H: formatto in

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

ricordando di ripristinare di nuovo in seguito

Si sta trattando il tempo trascorso come un timbro datetime per la formattazione (che è quello che la funzione data () si aspetta), in modo PHP sta seguendo è comportamento standard e trattandolo come un locale in formato data / ora (non apprezzare che è utilizzato come un trascorso tempo), quindi è aggiunta l'ora per visualizzare l'ora corretta secondo la vostra impostazione del fuso orario.

Risposto il 21/04/2011 a 13:37
fonte dall'utente

voti
1

Si sta trattando la differenza di tempo come un momento in cui si utilizza la data ( "H: i"). Vi suggerisco di appena calcolare la differenza di tempo trascorso manualmente

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

In caso contrario, si esegue in problemi quando $ trascorso è più grande poi 24 ore.

Risposto il 21/04/2011 a 14:08
fonte dall'utente

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