Was keinen Sinn macht, denn beim Laufen var_dump() auf der Variable $mydatezeigt es deutlich, dass diese Eigenschaft existiert und öffentlich zugänglich ist:
var_dump($mydate);
object(DateTime)[1]
public 'date' => string '2012-12-29 17:19:25' (length=19)
public 'timezone_type' => int 3
public 'timezone' => string 'UTC' (length=3)
Ist das ein Fehler in PHP oder mache ich etwas falsch? Ich verwende PHP 5.4.3.
Gute Frage. Ich dachte für einen Moment, ich hätte nichts verstanden.
Das verfügbare Datum ist eigentlich ein Nebeneffekt der Unterstützung für var_dump() hier – [email protected]
Aus irgendeinem Grund sollen Sie aber nicht auf das Grundstück zugreifen können var_dump zeigt es trotzdem. Wenn Sie das Datum wirklich in diesem Format erhalten möchten, verwenden Sie die DateTime::format() Funktion.
echo $mydate->format('Y-m-d H:i:s');
Warum sollte man nicht genau dieses Format wollen? Es ist dasselbe Format wie MySQL für Datumsangaben.
– Megan Caithlyn
16. Juli 2015 um 16:51 Uhr
Dies ist dasselbe, wenn Sie var_dump oder print_r verwenden.
– Andy Gaskell
24. April 2019 um 10:44 Uhr
hek2mgl
Update: Das Verhalten hat sich in PHP7.3 geändert, die ursprüngliche Antwort funktioniert nicht mehr. Um mit allen PHP-Versionen die gleichen Ergebnisse zu erhalten, inkl. >=7.3 können Sie den folgenden Code verwenden:
$dt = new DateTime();
$date = $dt->format('Y-m-d\TH:i:s.v');
Fürs Protokoll, die ursprüngliche Antwort:
Außer zu telefonieren DateTime::format() Sie können mit Reflektion auf die Eigenschaft zugreifen:
<?php
$dt = new DateTime();
$o = new ReflectionObject($dt);
$p = $o->getProperty('date');
$date = $p->getValue($dt);
Dies ist etwas schneller als die Verwendung format() da format() formatiert einen bereits formatierten Zeitstring. Vor allem, wenn Sie es viele Male in einer Schleife tun.
Dies ist jedoch kein dokumentiertes Verhalten von PHP, es kann sich jederzeit ändern.
@TechCare99 🙂 Ich denke, es sollte niemals so funktionieren, es war ein Hack. Sie müssen 7.4 nach einer Alternative suchen, die heutzutage nicht viel PHP macht, aber ich werde es überprüfen. Danke für die Information!
Wie in den anderen Antworten erwähnt, handelt es sich um ein Problem mit PHP, das bis heute ungelöst ist, aber wenn es sich um eine „Nebenwirkung“ handelt var_dump() Ich bin nicht sicher..
echo ((array) new DateTime())['date']; // Works in PHP 7.
Worüber ich mir sicher bin, ist das wenn die Eigenschaften von DateTime wo es von uns verwendet werden sollte, wäre es zur Verfügung gestellt worden. Aber wie viele interne Klassen sind sie es nicht und Sie sollten sich nicht auf “hacky” oder “glitchy” Methoden verlassen, um Ihren Code zu reparieren. Stattdessen sollten Sie ihre verwenden API.
echo (new DateTime())->format('Y-m-d H:i:s');
Wenn Sie nicht zufrieden sind, können Sie die Klasse verlängern oder vielleicht verwenden Kohlenstoff das erweitert es für Sie.
echo (new Carbon())->toDateTimeString();
Wenn Sie sich fragen, wie var_dump() erstellt eine gefälschte Ausgabe eines Objekts, das Sie sich ansehen __debugInfo()
Die date-Eigenschaft von DateTime ist geschützt.
Sie können das Datum mit der Formatfunktion anzeigen.
Sie sehen also, dass das Eigenschaftsdatum sogar für das Objekt existiert. Ich kann dieses Verhalten nicht verstehen. Kommentieren Sie einfach den var_Dump aus und Sie erhalten den Fehler erneut.
Gute Frage. Ich dachte für einen Moment, ich hätte nichts verstanden.
– normales Mikrofon
15. Oktober 2015 um 16:59 Uhr