In Magento 1.x können Sie das Speicherdatum und die Uhrzeit über abrufen
Mage::getModel('core/date')->gmtDate();
Was wäre das Äquivalent dazu in Magento 2.x?
Sie müssen in Ihren Klassenkonstruktor eine Instanz von einfügen \Magento\Framework\Stdlib\DateTime\DateTime
und diese verwenden.
Etwas wie das:
protected $date;
public function __construct(
....
\Magento\Framework\Stdlib\DateTime\DateTime $date,
....
) {
....
$this->date = $date;
....
}
Dann können Sie in Ihrer Klasse Folgendes verwenden:
$date = $this->date->gmtDate();
gmtDate
oben gezeigte Methode akzeptiert 2 optionale Parameter. Die erste ist$format
die StandardeinstellungY-m-d H:i:s
. Sie können die Methode einfach mit dem gewünschten ParametergmtDate('H:i:s')
oder einem anderen Zeitformat aufrufen .Um das UTC-Datum in Magento2 zu erhalten, sollten Sie verwenden
\Magento\Framework\Stdlib\DateTime\DateTime::gmtDate();
Sie sollten die Abhängigkeit von dieser Klasse über das Konstrukt einfügen und dann diese Funktion verwenden. In dieser Klasse finden Sie weitere datums- und zeitbezogene Methoden.
In Ihrem Codebeispiel rufen Sie das UTC-Datum ab, nicht das Speicherdatum. Um das Datum gemäß der Zeitzone des aktuellen Speichers zu formatieren , verwenden Sie
Magento\Framework\Stdlib\DateTime\TimezoneInterface::formatDate();
(erneut durch Einfügen der Konstruktionsabhängigkeit)quelle
\Magento\Framework\Stdlib\DateTime\DateTime::gmtTimestamp()
Sie können auf einfache Weise die aktuelle Speicherdatum-Uhrzeit ermitteln, indem Sie in Ihrem Klassenkonstruktor eine Instanz von
\Magento\Framework\Stdlib\DateTime\TimezoneInterface
einfügen und diese verwenden, um das DateObject abzurufen.Beispielsweise:
Und dann können Sie es wie folgt verwenden:
Weitere Informationen zu verschiedenen Formaten finden Sie in diesem Artikel, den ich geschrieben habe: https://codeblog.experius.nl/magento-2-get-current-store-date-time/
quelle
Wir können die Zeitzone des Speichers mithilfe des Beobachters mit dem Ereignis "controller_action_predispatch" festlegen.
Erstellen Sie die Datei events.xml im Ordner Mymodle / etc / frontend / events.xml
Erstellen Sie im Observer-Ordner die Datei SetStoreTimezoneObserver.php
Anstatt "UTC" -Datum zu erhalten, wird jetzt das aktuelle Speicherdatum mit der einfachen Datumsfunktion ("Ymd H: i: s") ermittelt.
quelle
Magento 2.x verfügt über Kontextobjekte für verschiedene Klassen. Wenn Sie sich in einem Kontext von Block befinden, kann das Kontextobjekt das Datumsobjekt des Gebietsschemas wie folgt angeben:
dann kannst du es wie folgt benutzen:
Dadurch werden Fehler beim Ausführen des Befehls di: compile vermieden.
quelle
So rufen Sie das aktuelle Datum und die Uhrzeit eines bestimmten Geschäfts ab (außer dem aktuellen Geschäft in StoreManager):
Referenz von
\Magento\Framework\Stdlib\DateTime\Timezone::convertConfigTimeToUtc()
\Magento\Framework\Stdlib\DateTime
Sie erhalten die UTC-Datumszeit, die GMT-Datumszeit oder die Datumszeit des aktuellen Geschäfts.Magento 2 setzt UTC in
app/bootstrap
:\DateTime
Verwendet standardmäßig diese PHP-Zeitzoneneinstellung. Magento 2 verwendet intern UTC und speichert in MySQL auch in UTC. Linux-Server und MySQL-Server sind normalerweise auf UTC-Zeitzone eingestellt. Die Kette der Zeitzoneneinstellungen auf einem Server ist nicht Gegenstand dieses Themas.Magento 2 zeigt am Frontend das Datum in der Zeitzone des aktuellen Geschäfts an. Verwenden Sie dazu den Locale Resolver
\Magento\Framework\Locale\Resolver
, um die aktuelle Zeitzone des Geschäfts abzurufen (zEurope/Bruxelles
. B. ).quelle
In meinem Fall, wenn ich dies auf meinem Controller verwende, funktioniert es nicht. Stattdessen erhalte ich das Standarddatum für das Gebietsschema.
Aber wenn ich es auf meinem Block benutze, funktioniert es.
quelle
Die folgende Lösung ist, dass ich es in Magento 2.1.2 CE versucht habe und gut funktioniert.
Gehe zur Datei
app\bootstrap.php
, hier findest du das Ende der Datei.Was falsch ist, auf deine eingestellt
& Aktuelles Datum abrufen mit
quelle
date_default_timezone_set('UTC')
falsch? Aus architektonischer Sicht ist es sinnvoll, die Standard-TZ auf UTC zu setzen und dann nach Belieben zwischen Geschäften zu konvertieren. Dasselbe gilt für Datum und Uhrzeit in der Datenbank: Dies ist einfacher, wenn Sie sie in UTC speichern und nach Bedarf konvertieren.