Dans Magento 1.x, vous pouvez obtenir l'heure de la date du magasin via
Mage::getModel('core/date')->gmtDate();
Quel serait l'équivalent de cela dans Magento 2.x?
Vous devez injecter dans votre constructeur de classe une instance de \Magento\Framework\Stdlib\DateTime\DateTime
et utiliser celle-ci.
Quelque chose comme ça:
protected $date;
public function __construct(
....
\Magento\Framework\Stdlib\DateTime\DateTime $date,
....
) {
....
$this->date = $date;
....
}
Ensuite, vous pouvez utiliser dans votre classe ceci:
$date = $this->date->gmtDate();
gmtDate
indiquée ci-dessus accepte 2 paramètres facultatifs. Le premier est$format
celui par défautY-m-d H:i:s
. Vous pouvez simplement appeler la méthode avec le paramètre souhaitégmtDate('H:i:s')
ou tout autre format d'heure.Pour obtenir la date UTC dans Magento2, vous devez utiliser
\Magento\Framework\Stdlib\DateTime\DateTime::gmtDate();
Vous devez injecter une dépendance sur cette classe via la construction, puis utiliser cette fonction. Voir cette classe pour plus de méthodes liées à la date / heure.
Dans votre exemple de code, vous récupérez la date UTC, pas la date de stockage. Pour obtenir la date formatée en fonction du fuseau horaire du magasin actuel , utilisez
Magento\Framework\Stdlib\DateTime\TimezoneInterface::formatDate();
(encore une fois, en injectant des dépendances pour construire)la source
\Magento\Framework\Stdlib\DateTime\DateTime::gmtTimestamp()
Vous pouvez facilement obtenir la date et l'heure du magasin actuel en injectant dans votre constructeur de classe
\Magento\Framework\Stdlib\DateTime\TimezoneInterface
et en l'utilisant pour obtenir le DateObject.Par exemple:
Et puis vous pouvez l'utiliser comme suit:
Pour plus d'informations sur les différents formats, vous pouvez consulter cet article que j'ai écrit https://codeblog.experius.nl/magento-2-get-current-store-date-time/
la source
Nous pouvons définir le fuseau horaire du magasin à l'aide de l'observateur avec l'événement "controller_action_predispatch"
Créez events.xml dans le dossier Mymodle / etc / frontend / events.xml
Dans le dossier Observer, créez le fichier SetStoreTimezoneObserver.php
Maintenant, au lieu d'obtenir la date "UTC", nous obtenons la date actuelle du magasin en utilisant la fonction simple date ("Ymd H: i: s").
la source
Magento 2.x a des objets de contexte pour différentes classes, si vous êtes dans un contexte de bloc, alors l'objet de contexte peut vous donner un objet de date locale comme suit:
alors vous pouvez l'utiliser comme suit:
Cela évitera les erreurs lors de l'exécution de la commande di: compile.
la source
Pour obtenir l'heure de la date actuelle d'un magasin particulier (autre que le magasin actuel dans StoreManager):
Référence de
\Magento\Framework\Stdlib\DateTime\Timezone::convertConfigTimeToUtc()
\Magento\Framework\Stdlib\DateTime
vous obtiendrez l'heure UTC, l'heure GMT ou l'heure actuelle du magasin.Magento 2 définit UTC dans
app/bootstrap
:\DateTime
utilise ce paramètre de fuseau horaire PHP par défaut. Magento 2 utilisera en interne UTC et il enregistre également dans MySQL en UTC. Les serveurs Linux et les serveurs MySQL sont généralement définis sur le fuseau horaire UTC. La chaîne des paramètres de fuseau horaire sur un serveur ne fait pas partie de cette rubrique.Magento 2 affichera sur le frontend la date dans le fuseau horaire du magasin actuel en utilisant le résolveur de paramètres régionaux
\Magento\Framework\Locale\Resolver
pour obtenir le fuseau horaire du magasin actuel (par exempleEurope/Bruxelles
).la source
Dans mon cas, si j'utilise ceci sur mon contrôleur, cela ne fonctionne pas. J'obtiens la date locale par défaut à la place.
Mais si je l'utilise sur mon bloc, cela fonctionne.
la source