В Magento 1.x вы можете получить дату магазина через
Mage::getModel('core/date')->gmtDate();
Что будет эквивалентно этому в Magento 2.x?
Вам нужно внедрить в ваш конструктор класса экземпляр \Magento\Framework\Stdlib\DateTime\DateTime
и использовать его.
Что-то вроде этого:
protected $date;
public function __construct(
....
\Magento\Framework\Stdlib\DateTime\DateTime $date,
....
) {
....
$this->date = $date;
....
}
Затем вы можете использовать в своем классе это:
$date = $this->date->gmtDate();
gmtDate
показанный выше, принимает 2 необязательных параметра. Первый,$format
который по умолчаниюY-m-d H:i:s
. Вы можете просто вызвать метод с нужным параметромgmtDate('H:i:s')
или любым другим форматом времени.Чтобы получить дату UTC в Magento2, вы должны использовать
\Magento\Framework\Stdlib\DateTime\DateTime::gmtDate();
Вы должны внедрить зависимость от этого класса через конструкцию и затем использовать эту функцию. См. Этот класс для большего количества связанных с датой / временем методов.
В вашем примере кода вы получаете дату UTC, а не дату магазина. Чтобы получить дату, отформатированную в соответствии с часовым поясом текущего хранилища , используйте
Magento\Framework\Stdlib\DateTime\TimezoneInterface::formatDate();
(опять же, введя зависимость для построения)источник
\Magento\Framework\Stdlib\DateTime\DateTime::gmtTimestamp()
Вы можете легко получить текущее время хранения в хранилище, вставив в ваш конструктор класса экземпляр
\Magento\Framework\Stdlib\DateTime\TimezoneInterface
и использовать его для получения DateObject.Например:
И тогда вы можете использовать его следующим образом:
Для получения дополнительной информации о различных форматах вы можете взглянуть на эту статью, которую я написал https://codeblog.experius.nl/magento-2-get-current-store-date-time/
источник
Мы можем установить часовой пояс магазина с помощью наблюдателя с событием «controller_action_predispatch»
Создайте файл events.xml в папке Mymodle / etc / frontend / events.xml.
В папке Observer создайте файл SetStoreTimezoneObserver.php
Теперь вместо получения даты «UTC» мы получаем текущую дату магазина, используя функцию простой даты («Ymd H: i: s»).
источник
В Magento 2.x есть объекты контекста для разных классов, если вы находитесь в контексте блока, тогда объект контекста может дать вам объект даты локали следующим образом:
тогда вы можете использовать его следующим образом:
Это позволит избежать ошибок при выполнении команды di: compile.
источник
Чтобы получить текущую дату и время определенного магазина (кроме текущего магазина в StoreManager):
Ссылка от
\Magento\Framework\Stdlib\DateTime\Timezone::convertConfigTimeToUtc()
\Magento\Framework\Stdlib\DateTime
Вы получите время в формате UTC, время по Гринвичу или время в текущем магазине.Magento 2 устанавливает UTC в
app/bootstrap
:\DateTime
использует эту настройку часового пояса PHP по умолчанию. Magento 2 будет использовать внутреннее UTC, а также сохраняет в MySQL в UTC. Для серверов Linux и MySQL обычно устанавливается часовой пояс UTC. Цепочка настроек часового пояса на сервере выходит за рамки этого раздела.Magento 2 будет отображать во внешнем интерфейсе дату в часовом поясе текущего магазина с использованием средства распознавания локали
\Magento\Framework\Locale\Resolver
для получения текущего часового пояса магазина (напримерEurope/Bruxelles
).источник
В моем случае, если я использую это на моем контроллере, это не работает. Вместо этого я получаю дату локали по умолчанию.
Но если я использую это на своем блоке, это работает.
источник