PHP5 adăugând 1 HR la timp variabile / calcule goale

voturi
1

Am actualizat recent la PHP5, și au noticied că într-o aplicație am construit acolo pare să fie o oră suplimentară adăugată la unele dintre variabile și caculations mele.

Eu folosesc:

date_default_timezone_set ( 'Europa / Londra');

care înțeleg ce înseamnă că PHP folosește BST spre deosebire de standardul GMT, dar când am imprima variabile goale (returnate înainte ca 00:00 folosind „H: I“) - Sunt acum obtinerea 01:00.

Când caculating parametrul / min diferența oră între două datetimes - Primesc, de asemenea, o oră în plus.

Codul meu de bază este:

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

Ceea ce pentru un exemplu rown întoarce:

Start: 08:57 (Bazat pe $ item-> START_TIME ca 2011-03-19 08:57:23 în DB meu)

Finish: 12:59 (Bazat pe $ item-> finish_time ca 2011-03-19 12:59:38 în DB meu)

Caculation: 05:02 (Aceasta ar trebui să fie 04:02)

Întrebat 21/04/2011 la 10:09
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

Încercați să setați

date_default_timezone_set('UTC');

imediat înainte de a converti timpul scurs la H: I format în

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

amintindu să-l resetați din nou după aceea

Te tratează timpul scurs ca un timbru datetime pentru formatare (care este ceea ce se așteaptă ca funcția dată ()), astfel încât PHP este următorul este un comportament standard si tratarea acestuia ca un cod local formatat data / ora (nu apreciind că acesta este folosit ca un trecut timp), așa că adăugarea de oră pentru a afișa ora corectă în funcție de setarea de fus orar.

Publicat 21/04/2011 la 13:37
sursa de către utilizator

voturi
1

Tu tratează diferența de fus orar ca un punct în timp atunci când utilizați data ( „H: i“). Vă sugerez să calculeze doar diferența de timp scurs manual

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

În caz contrar, va rula în probleme atunci când $ scurs este mai mare de 24 de ore.

Publicat 21/04/2011 la 14:08
sursa de către utilizator

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