2010-05-27 3 views
9

Devo calcolare la differenza di fuso orario come farlo in PHP. Ho bisogno di ore esatte, minuti e secondi. qualsiasi organismo hanno gli script per questo vi prego di :-Pcome calcolare la differenza di orario in PHP

+14

Questo suona come i compiti –

+5

Google è tuo amico. (E per qualcuno come affermato "php learner" non sembri così ansioso di imparare ...) –

+0

... come interpretare i crossover DST? – symcbean

risposta

0

danno la funzione di datediff a addedbytes.com si lascia a poco così facilmente :)

+2

Perché utilizzare una vecchia funzione di buggy come questa quando la classe DateTime ha questa funzionalità integrata? – vascowhite

8

Scegli questa .. Questo dovrebbe funzionare

<?php 

function timeDiff($firstTime,$lastTime) 
{ 

// convert to unix timestamps 
$firstTime=strtotime($firstTime); 
$lastTime=strtotime($lastTime); 

// perform subtraction to get the difference (in seconds) between times 
$timeDiff=$lastTime-$firstTime; 

// return the difference 
return $timeDiff; 
} 

//Usage : 
echo timeDiff("2002-04-16 10:00:00","2002-03-16 18:56:32"); 

?> 
+0

Ciao vimard grazie per il tuo prezioso replay. In realtà voglio mostrare la vecchiaia dei file come in facebook o orkut. loro mostrano il tempo, i giorni, la settimana, la visualizzazione basata sull'anno. –

+1

quindi questo risolve il tuo problema rite ... – Vimard

+0

@Vimard che voleva (4 anni fa) per vedere la differenza in giorni, settimane, anni non secondi. –

0

Per qualcosa del genere utilizzare la funzione built time int().

  • Conservare il valore di time(); qualcosa come 1274467343 che è il numero di secondi scince
  • Quando mai avuto bisogno retrive il valore e assegnarlo a $erlierTime.
  • Assegna time() di nuovo al tempo fermata quest'ultimo si vorrebbe, consente solo chiamano $latterTime

Così ora avete qualcosa come $erlierTime e $latterTime.

Non basta fare $latterTime - $erlierTime per ottenere la differenza in pochi secondi e poi fare le vostre divisioni per ottenere insensibile di minuti passati, num di ore passate ecc


in modo per me o chiunque per darvi un script completo avresti bisogno di dirci come è il tuo ambiente e cosa stai lavorando con mysql, sqlite, ecc ... anche per sapere come viene attivato quel timer.

7

Questo dovrebbe funzionare, basta sostituire i tempi nel fuso orario con il momento in cui l'attività è iniziata e l'ora corrente o il tempo in cui l'attività è terminata. Per un contatore continua l'orario di inizio sarebbe memorizzati in un database, o per il tempo trascorso per un compito il tempo finale sarebbe così

function timeDiff($firstTime,$lastTime){ 
    // convert to unix timestamps 
    $firstTime=strtotime($firstTime); 
    $lastTime=strtotime($lastTime); 

    // perform subtraction to get the difference (in seconds) between times 
    $timeDiff=$lastTime-$firstTime; 

    // return the difference 
    return $timeDiff; 
} 

//Usage : 
$difference = timeDiff("2002-03-16 10:00:00",date("Y-m-d H:i:s")); 
$years = abs(floor($difference/31536000)); 
$days = abs(floor(($difference-($years * 31536000))/86400)); 
$hours = abs(floor(($difference-($years * 31536000)-($days * 86400))/3600)); 
$mins = abs(floor(($difference-($years * 31536000)-($days * 86400)-($hours * 3600))/60));#floor($difference/60); 
echo "<p>Time Passed: " . $years . " Years, " . $days . " Days, " . $hours . " Hours, " . $mins . " Minutes.</p>"; 
0

La soluzione migliore sarebbe quella di utilizzare il codice personalizzato, ci sono molti incorporato in funzioni in php che ti permettono di farlo facilmente. Date, strtotime e time.

  1. Prima convertire qualsiasi le date da "Y-m-d H: i: s" formato a Linux time-stamp utilizzando strtotime la funzione.
  2. Effettuare i calcoli e utilizzare time per ottenere la data e l'ora corrente, se applicabile.
  3. Convertire la data/ora calcolata in date utilizzando la funzione date.
0

È necessario convertire l'ora di inizio e l'ora di fine tramite strtotime.

dopo aver sottratto l'ora di inizio dall'ora di fine.

dopo aver superato tale differenza per il formato data o ora che era necessario ...

in modo da ottenere la differenza esatta tra due date.

20

Utilizzare il diff() method di PHP di DateTime class in questo modo: -

$lastWeek = new DateTime('last thursday'); 
$now = new DateTime(); 
var_dump($now->diff($lastWeek, true)); 

Questo vi darà un oggetto DateInterval: -

object(DateInterval)[48] 
    public 'y' => int 0 
    public 'm' => int 0 
    public 'd' => int 2 
    public 'h' => int 11 
    public 'i' => int 34 
    public 's' => int 41 
    public 'invert' => int 0 
    public 'days' => int 2 

Recupero i valori desiderati da che è banale.