2013-09-26 10 views
8

Desidero aggiungere tempo a una data esistente. Ho 2 variabili stringa:Qual è il modo migliore di aggiungere un intervallo di tempo in PHP?

$date  = "2013-01-05 10:55:15"; 
$interval =   "50:25:10"; 

voglio calcolare la data finale "2013/01/07 13:20:25". Le ore nel tempo possono essere maggiori di 23, il che significa che questo intervallo può essere maggiore di un giorno intero.

Qual è il modo migliore per farlo?

+2

http://www.php.net/manual/en/datetime.add.php – CBroe

risposta

7

Uso DateTime API:

$date = new DateTime("2013-01-05 10:55:15"); 
$date->add(new DateInterval("PT50H25M10S")); 

Quindi è possibile convertire di nuovo alla stringa con lo stesso formato di data userebbe con date() la funzione, se si vuole:

$string = $date->format("Y-m-d H:i:s"); 

per ulteriori informazioni sul DateInterval definizione, visitare questa pagina:

DateInterval

Il formato inizia con la lettera P, per "periodo". Ogni periodo è rappresentato da un valore intero seguito da un punto di riferimento . Se la durata contiene elementi temporali, quella porzione di la specifica è preceduta dalla lettera T.

Ecco alcuni semplici esempi. Due giorni è P2D. Due secondi è PT2S. Sei anni e cinque minuti è P6YT5M.

quindi in questo caso significa PT50H25M10S 50 ore e 25 minuti e 10 secondi

noti che DateInterval è disponibile solo dal PHP 5.3, se si deve utilizzare la versione più bassa, si potrebbe usare qualcosa di simile:

$time = strtotime("2013-01-05 10:55:15"); 
$time += 55*60*60 + 25*60 + 10; 
$newDate = date("Y-m-d H:i:s"); 
5

Questo è un po 'difficile.

Normalmente quello che si fa qui, se si trattava di un periodo di statica, o è stato un singolo tipo di periodo, è qualcosa sulla falsariga di:

$date = "2013-01-05 10:55:15"; 
$time = new DateTime($date); 
$time->add(new DateInterval('PT5M')); 

Ciò aggiungere 5 minuti per il datetime. Comunque dubito che tu possa passare all'intero intervallo. Quindi probabilmente dovrai dividere l'intervallo per: e poi aggiungere ogni parte dell'intervallo (presumo che sia dinamico?) Alla data separatamente. Così prime ore, poi minuti, poi secondi

Per ulteriori informazioni su questo, vedere qui: http://www.php.net/manual/en/datetime.add.php

3

Potresti primo esplodere l'intervallo e quindi ottenere le ore, minuti, secondi, e quindi utilizzare DateTime di add() per aggiungere l'intervallo, in questo modo:

$interval = '50:25:10'; 
$datestring = '2013-01-05 10:55:15';  
list($hours, $minutes, $seconds) = explode(':', $interval); 

$date = new DateTime($datestring);  
$date->add(new DateInterval('PT'.$hours.'H'.$minutes.'M'.$seconds.'S')); 
echo $date->format('Y-m-d H:i:s'); 

Demo!

1

Nel caso qualcuno ha bisogno in base alle risposte di cui sopra, ho fatto la mia funzione come questa:

public function addTime($date, $time) { 
    $atime = explode(":", $time); 
    $_date = date_create_from_format("Y-m-d H:i:s", $date); 
    $_date->add(new DateInterval("PT" . intval($atime[0])."H".intval($atime[1])."M".intval($atime[2])."S")); 
    return $_date->format("Y-m-d H:i:s"); 
} 

spero che aiuti qualcuno

Problemi correlati