2012-06-11 12 views
11

Wie erhalten Sie das heutige Datum als Datum Objekt?Wie aktuelles Datum/Uhrzeit als Datumsobjekt in PHP zu bekommen

Ich versuche, den Unterschied zwischen Startdatum und heute zu berechnen. Im Folgenden wird nicht funktionieren, weil getdate() ein Array zurückgibt und kein Datum Objekt:

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

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

Ausgang:

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)

Antwort

33
new DateTime('now'); 

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

Vergleich ist einfach:

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

if ($today > $newYear) { 

} 

Op's Bearbeitung Ich musste nur anrufen date_default_timezone_set, und dann arbeitete dieser Code für mich.

+3

Ich denke, die explizite '$ heute = neue DateTime (" jetzt ");' ist klarer, auch wenn das Argument standardmäßig auf "jetzt". – jedwards

+0

Der Code * $ today = new DateTime ('now'); * wirft tatsächlich einen Fehler irgendeiner Art auf. (500 interner Serverfehler) – McGarnagle

+1

@dbaseman Können Sie genauer sein? Welche Version von PHP verwenden Sie? http://codepad.org/5lYyo8MC –

0

Ich endete mit dem date_create Konstruktor (kein Parameter), um das aktuelle Datum zu erhalten.

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

Ausgang:

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

Ich habe keine Ahnung, warum, aber Mike B Antwort (und jeder Konstruktor ich für Datetime versucht) warf mir einen Fehler in PHP5/IIS.

+1

Froh, dass Sie eine Lösung gefunden haben. Wenn Sie wissen möchten, warum "DateTime" nicht instanziiert wurde, können Sie versuchen, Fehlermeldungen anzuzeigen. 500 Fehler ist die Art und Weise, wie IIS Ihnen sagt, dass PHP barfed ist, aber es wird nicht viel spezifischer. Sie können das Fehler-Reporting ankurbeln, indem Sie diese Funktionen am Anfang Ihres Skripts platzieren: 'error_reporting (-1); ini_set ('display_errors', 1); ini_set ('display_startup_errors', 1); '. Das Fehlerprotokoll des IIS kann auch spezifische Fehlermeldungen enthalten. –

+0

@MikeB danke. Dies war der Fehler: * Es ist nicht sicher, sich auf die Zeitzoneneinstellungen des Systems zu verlassen. Sie müssen die date.timezone-Einstellung oder die Funktion date_default_timezone_set() verwenden. * Sobald ich * date_default_timezone_set * aufruft, funktioniert Ihre Antwort. – McGarnagle

10

Unterschied Um in Tagen nutzen dies:

$today = new DateTime('today'); 

die Zeit in diesem Objekt eill 00:00:00

sein Wenn Sie Unterschied von Stunden, Minuten und Sekunden möchten Sie mit diesem:

$now = new DateTime('now'); 
Verwandte Themen