En Magento 1.x puede obtener la hora de la fecha de la tienda a través de
Mage::getModel('core/date')->gmtDate();
¿Cuál sería el equivalente a esto en Magento 2.x?
Necesita inyectar en su constructor de clase una instancia de \Magento\Framework\Stdlib\DateTime\DateTime
y usar esa.
Algo como esto:
protected $date;
public function __construct(
....
\Magento\Framework\Stdlib\DateTime\DateTime $date,
....
) {
....
$this->date = $date;
....
}
Entonces, puedes usar en tu clase esto:
$date = $this->date->gmtDate();
gmtDate
muestra arriba acepta 2 parámetros opcionales. El primero es$format
el predeterminadoY-m-d H:i:s
. Puede llamar al método con el parámetro que deseegmtDate('H:i:s')
o cualquier otro formato de hora.Para obtener la fecha UTC en Magento2, debe usar
\Magento\Framework\Stdlib\DateTime\DateTime::gmtDate();
Debe inyectar dependencia en esta clase a través de la construcción y luego usar esta función. Vea esta clase para más métodos relacionados con la fecha / hora.
En su ejemplo de código, está recuperando la fecha UTC, no la fecha de almacenamiento. Para obtener el formato de fecha de acuerdo con la zona horaria de la tienda actual , use
Magento\Framework\Stdlib\DateTime\TimezoneInterface::formatDate();
(nuevamente, inyectando dependencia para construir)fuente
\Magento\Framework\Stdlib\DateTime\DateTime::gmtTimestamp()
Puede obtener fácilmente la fecha y hora actual de la tienda inyectando en su constructor de clase, por ejemplo,
\Magento\Framework\Stdlib\DateTime\TimezoneInterface
y usarlo para obtener el objeto de fecha.Por ejemplo:
Y luego puedes usarlo de la siguiente manera:
Para obtener más información sobre los diferentes formatos, puede consultar este artículo que escribí https://codeblog.experius.nl/magento-2-get-current-store-date-time/
fuente
Podemos configurar la zona horaria de la tienda usando el observador con el evento "controller_action_predispatch"
Cree events.xml en la carpeta Mymodle / etc / frontend / events.xml
En la carpeta Observer, cree el archivo SetStoreTimezoneObserver.php
Ahora, en lugar de obtener la fecha "UTC", obtenemos la fecha de la tienda actual utilizando la función simple de fecha ("Ymd H: i: s").
fuente
Magento 2.x tiene objetos de contexto para diferentes clases, si se encuentra en un contexto de Bloque, el objeto de contexto puede proporcionarle el objeto de fecha local de la siguiente manera:
entonces puedes usarlo de la siguiente manera:
Esto evitará errores al ejecutar el comando di: compile.
fuente
Para obtener la fecha y hora actual de una tienda en particular (que no sea la tienda actual en StoreManager):
Referencia de
\Magento\Framework\Stdlib\DateTime\Timezone::convertConfigTimeToUtc()
\Magento\Framework\Stdlib\DateTime
obtendrá la hora UTC, la hora GMT o la hora actual de la tienda.Magento 2 establece UTC en
app/bootstrap
:\DateTime
usa esta configuración de zona horaria de PHP de forma predeterminada. Magento 2 utilizará UTC internamente y también se guardará en MySQL en UTC. Los servidores Linux y los servidores MySQL generalmente están configurados en la zona horaria UTC. La cadena de la configuración de la zona horaria en un servidor no está dentro del alcance de este tema.Magento 2 mostrará en la interfaz la fecha en la zona horaria de la tienda actual utilizando el solucionador de configuración regional
\Magento\Framework\Locale\Resolver
para obtener la zona horaria de la tienda actual (por ejemploEurope/Bruxelles
).fuente
En mi caso, si uso esto en mi controlador, no funciona. En su lugar, obtengo la fecha de configuración regional predeterminada.
Pero si lo uso en mi bloque funciona.
fuente