W Magento 1.x można uzyskać datę sklepu za pośrednictwem
Mage::getModel('core/date')->gmtDate();
Co byłoby równoważne z tym w Magento 2.x?
Musisz wstrzyknąć do konstruktora klasy instancję \Magento\Framework\Stdlib\DateTime\DateTime
i użyć tego.
Coś takiego:
protected $date;
public function __construct(
....
\Magento\Framework\Stdlib\DateTime\DateTime $date,
....
) {
....
$this->date = $date;
....
}
Następnie możesz użyć w swojej klasie:
$date = $this->date->gmtDate();
gmtDate
pokazana powyżej akceptuje 2 parametry opcjonalne. Pierwszym z nich jest$format
domyślnieY-m-d H:i:s
. Możesz po prostu wywołać metodę zgmtDate('H:i:s')
dowolnym parametrem lub dowolnym innym formatem czasu.Aby uzyskać datę UTC w Magento2, powinieneś użyć
\Magento\Framework\Stdlib\DateTime\DateTime::gmtDate();
Powinieneś wstrzyknąć zależność od tej klasy poprzez build, a następnie użyć tej funkcji. Zobacz tę klasę, aby uzyskać więcej metod związanych z datą / czasem.
W przykładowym kodzie pobierasz datę UTC, a nie datę przechowywania. Aby sformatować datę zgodnie ze strefą czasową bieżącego sklepu , użyj
Magento\Framework\Stdlib\DateTime\TimezoneInterface::formatDate();
(ponownie, wstrzykując zależność do skonstruowania)źródło
\Magento\Framework\Stdlib\DateTime\DateTime::gmtTimestamp()
Możesz łatwo uzyskać aktualną datę
\Magento\Framework\Stdlib\DateTime\TimezoneInterface
i godzinę przechowywania, wprowadzając konstruktor klasy na przykład i używając go, aby uzyskać DateObject.Na przykład:
A następnie możesz użyć go w następujący sposób:
Aby uzyskać więcej informacji na temat różnych formatów, zapoznaj się z tym artykułem. Napisałem https://codeblog.experius.nl/magento-2-get-current-store-date-time/
źródło
Możemy ustawić strefę czasową sklepu za pomocą obserwatora ze zdarzeniem „controller_action_predispatch”
Utwórz events.xml w folderze Mymodle / etc / frontend / events.xml
W folderze Observer utwórz plik SetStoreTimezoneObserver.php
Teraz zamiast daty „UTC”, bierzemy bieżącą datę sklepu za pomocą prostej funkcji daty („Ymd H: i: s”).
źródło
Magento 2.x ma obiekty kontekstowe dla różnych klas, jeśli znajdujesz się w kontekście bloku, wówczas obiekt kontekstowy może dać ci obiekt daty locale w następujący sposób:
możesz użyć tego w następujący sposób:
Pozwoli to uniknąć błędów podczas wykonywania polecenia di: compile.
źródło
Aby uzyskać bieżącą datę i godzinę określonego sklepu (innego niż bieżący sklep w StoreManager):
Referencje od
\Magento\Framework\Stdlib\DateTime\Timezone::convertConfigTimeToUtc()
\Magento\Framework\Stdlib\DateTime
poda Ci datę UTC, datę GMT lub datę bieżącego sklepu.Magento 2 ustawia UTC w
app/bootstrap
:\DateTime
domyślnie korzysta z tego ustawienia strefy czasowej PHP. Magento 2 będzie używać wewnętrznie UTC i zapisuje również w MySQL w UTC. Serwery Linux i MySQL są zwykle ustawione na strefę czasową UTC. Łańcuch ustawień strefy czasowej na serwerze nie jest objęty tym tematem.Magento 2 wyświetli na interfejsie datę w strefie czasowej bieżącego sklepu przy użyciu przelicznika lokalizacji,
\Magento\Framework\Locale\Resolver
aby uzyskać bieżącą strefę czasową sklepu (npEurope/Bruxelles
.).źródło
W moim przypadku, jeśli użyję tego na moim kontrolerze, to nie zadziała. Zamiast tego otrzymuję domyślną datę lokalizacji.
Ale jeśli użyję go na moim bloku, to działa.
źródło