2012-06-11 16 views
11

Come si ottiene la data di oggi, come oggetto di data?come ottenere la data/ora corrente come oggetto di data in PHP

Sto provando a calcolare la differenza tra alcune date di inizio e oggi. Quanto segue non funziona, perché getdate() restituisce un array e non un oggetto data:

$today = getdate();   
$start = date_create('06/20/2012'); 
$diff = date_diff($start, $today); 

echo($today . '<br/>' . $start . '<br/>' . $diff); 

uscita:

Array ([seconds] => 8 [minutes] => 1 [hours] => 16 [mday] => 11 [wday] => 1 [mon] => 6 [year] => 2012 [yday] => 162 [weekday] => Monday [month] => June [0] => 1339455668)

DateTime Object ([date] => 2012-06-20 00:00:00 [timezone_type] => 3 [timezone] => America/Los_Angeles)

risposta

33
new DateTime('now'); 

http://www.php.net/manual/en/datetime.construct.php

confronto è facile:

$today = new DateTime('now'); 
$newYear = new DateTime('2012-01-01'); 

if ($today > $newYear) { 

} 

Modifica op. Avevo solo bisogno di chiamare date_default_timezone_set, e quindi questo codice ha funzionato per me.

+3

Penso che l'esplicito '$ today = new DateTime (" now ");' è più chiaro, anche se l'argomento è impostato su "now". – jedwards

+0

Il codice * $ today = new DateTime ('now'); * sta effettivamente generando un errore di qualche tipo. (Errore interno del server 500) – McGarnagle

+1

@dbaseman Puoi essere più specifico? Quale versione di PHP stai usando? http://codepad.org/5lYyo8MC –

0

Ho finito per utilizzare il costruttore date_create (nessun parametro) per ottenere la data corrente.

$diff = date_diff(date_create('06/20/2012'), date_create()); 
print_r($diff); 

uscita:

DateInterval Object ([y] => 0 [m] => 0 [d] => 8 [h] => 6 [i] => 30 [s] => 40 [invert] => 1 [days] => 8)

non ho idea perché, ma la risposta di Mike B (e di qualsiasi costruttore ho provato per DateTime) ha gettato un errore per me in PHP5/IIS.

+1

Felice di aver trovato una soluzione. Se sei curioso di sapere perché 'DateTime' non è riuscito a creare un'istanza, puoi provare a generare rapporti sugli errori. L'errore 500 è il modo in cui IIS ti dice che PHP è un problema, ma non diventa molto più specifico. Puoi richiamare l'errore riportando queste funzioni all'inizio del tuo script: 'error_reporting (-1); ini_set ('display_errors', 1); ini_set ('display_startup_errors', 1); '. Il registro degli errori di IIS potrebbe anche contenere messaggi di errore specifici. –

+0

@ Mike grazie. Questo era l'errore: * Non è sicuro affidarsi alle impostazioni del fuso orario del sistema. È necessario utilizzare l'impostazione date.timezone o la funzione date_default_timezone_set(). * Una volta chiamata * date_default_timezone_set *, la risposta funziona. – McGarnagle

10

Per ottenere differenza in giorni usano questo:

$today = new DateTime('today'); 

il tempo in questo oggetto eill essere 00:00:00

Se volete differenza con ore minuti e secondi utilizzare questo:

$now = new DateTime('now'); 
Problemi correlati