No Magento 1.x, você pode obter a hora da data da loja via
Mage::getModel('core/date')->gmtDate();
Qual seria o equivalente a isso no Magento 2.x?
Você precisa injetar no construtor de sua classe uma instância \Magento\Framework\Stdlib\DateTime\DateTime
e usá-la.
Algo assim:
protected $date;
public function __construct(
....
\Magento\Framework\Stdlib\DateTime\DateTime $date,
....
) {
....
$this->date = $date;
....
}
Em seguida, você pode usar em sua classe o seguinte:
$date = $this->date->gmtDate();
gmtDate
mostrado acima aceita 2 parâmetros opcionais. O primeiro é o$format
padrãoY-m-d H:i:s
. Você pode simplesmente chamar o método com o parâmetro desejadogmtDate('H:i:s')
ou qualquer outro formato de hora.Para obter a data UTC no Magento2, você deve usar
\Magento\Framework\Stdlib\DateTime\DateTime::gmtDate();
Você deve injetar dependência nessa classe por meio de construção e, em seguida, usar esta função. Veja esta classe para obter mais métodos relacionados a data / hora.
No seu exemplo de código, você está recuperando a data UTC, não a data da loja. Para obter a data formatada de acordo com o fuso horário do armazenamento atual , use
Magento\Framework\Stdlib\DateTime\TimezoneInterface::formatDate();
(novamente, injetando dependência para construir)fonte
\Magento\Framework\Stdlib\DateTime\DateTime::gmtTimestamp()
Você pode obter facilmente a Hora atual da data do armazenamento injetando seu construtor de classe na instância
\Magento\Framework\Stdlib\DateTime\TimezoneInterface
e usá-lo para obter o DateObject.Por exemplo:
E então você pode usá-lo da seguinte maneira:
Para obter mais informações sobre diferentes formatos, consulte este artigo que escrevi https://codeblog.experius.nl/magento-2-get-current-store-date-time/
fonte
Podemos definir o fuso horário da loja usando o observador com o evento "controller_action_predispatch"
Crie events.xml na pasta Mymodle / etc / frontend / events.xml
Na pasta Observer, crie o arquivo SetStoreTimezoneObserver.php
Agora, em vez de obter a data "UTC", obtemos a data atual da loja usando a função simples data ("Ymd H: i: s").
fonte
O Magento 2.x possui objetos de contexto para diferentes classes, se você estiver em um contexto de Bloco, o objeto de contexto poderá fornecer o objeto de data da localidade da seguinte maneira:
então você pode usá-lo da seguinte maneira:
Isso evitará erros ao executar o comando di: compile.
fonte
Para obter a data e hora atuais de uma loja específica (que não seja a loja atual no StoreManager):
Referência de
\Magento\Framework\Stdlib\DateTime\Timezone::convertConfigTimeToUtc()
\Magento\Framework\Stdlib\DateTime
você receberá a data e hora UTC, a hora GMT ou a data atual da loja.O Magento 2 define o UTC em
app/bootstrap
:\DateTime
usa essa configuração de fuso horário do PHP por padrão. O Magento 2 usará o UTC internamente e também salvará no MySQL no UTC. Servidores Linux e servidores MySQL geralmente são configurados para o fuso horário UTC. A cadeia de configurações de fuso horário em um servidor não faz parte do escopo deste tópico.O Magento 2 será exibido na frente da data no fuso horário da loja atual usando o resolvedor de localidade
\Magento\Framework\Locale\Resolver
para obter o fuso horário da loja atual (por exemploEurope/Bruxelles
).fonte
No meu caso, se eu usar isso no meu controlador, ele não funcionará. Em vez disso, recebo a data da localidade padrão.
Mas se eu usá-lo no meu bloco, ele funciona.
fonte