Magento 2 Mevcut Mağaza Tarihini Al


25

Magento 1.x’te mağaza tarihini saat üzerinden alabilirsiniz.

Mage::getModel('core/date')->gmtDate();

Magento 2.x de buna eşdeğer ne olurdu?

Yanıtlar:


42

Sınıf yapıcınıza bir örnek enjekte etmeniz \Magento\Framework\Stdlib\DateTime\DateTimeve bunu kullanmanız gerekir.
Bunun gibi bir şey:

protected $date;
public function __construct(
    ....
    \Magento\Framework\Stdlib\DateTime\DateTime $date,
    ....
) {
    ....
    $this->date = $date;
    ....
}

Sonra sınıfınızda bunu kullanabilirsiniz:

$date = $this->date->gmtDate();

1
o güncel mağaza saat dilimi bilge tarih almak için gmt tarih verir
ND17

Bunu denedim ama her zaman 5 saatlik bir zaman farkı vererek bana yardım edebilir misin?
Naveenbos

Sadece zaman nasıl alınır?
Sanjay Gohil

2
@SanjayGohil. gmtDateYukarıda gösterilen yöntem 2 isteğe bağlı parametre kabul eder. İlki, $formatvarsayılan olandır Y-m-d H:i:s. Sadece istediğiniz parametreyi gmtDate('H:i:s')veya başka bir zaman biçimini kullanarak yöntemi arayabilirsiniz .
Marius

Bu yöntemle aylara nasıl tarih eklenir / çıkarılır?
Ajwad Syed,

18

Magento2'de UTC tarihi almak için kullanmanız gerekir\Magento\Framework\Stdlib\DateTime\DateTime::gmtDate();

Bu sınıfa bağımlılık yoluyla yapıyı enjekte etmeli ve sonra bu işlevi kullanmalısınız. Daha fazla tarih / saat ile ilgili yöntemler için bu sınıfa bakın.

Kod numaranızda UTC tarihini alıyorsunuz, depo tarihini değil. Geçerli mağazanın saat dilimine göre biçimlendirilmiş tarih almak için , kullanın Magento\Framework\Stdlib\DateTime\TimezoneInterface::formatDate();(yine, yapıya bağımlılığı enjekte ederek)


Mevcut mağaza saat dilimi için bu işlev bana sadece tarih değil saat verir, nasıl zaman alabilirim?
ND17 11

Bir göz atın\Magento\Framework\Stdlib\DateTime\DateTime::gmtTimestamp()
Alex Paliarush

12

Geçerli Mağaza Tarih Saatini, sınıf \Magento\Framework\Stdlib\DateTime\TimezoneInterfaceyapıcınıza örneğin enjekte ederek kolayca alabilir ve DateObject'i almak için bunu kullanabilirsiniz.

Örneğin:

protected $timezone;
public function __construct(
    ....
    \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone,
    ....
) {
    ....
    $this->timezone = $timezone;
    ....
}

Ve sonra, aşağıdaki gibi kullanabilirsiniz:

$date = $this->timezone->formatDate();

Farklı biçimler hakkında daha fazla bilgi için https://codeblog.experius.nl/magento-2-get-current-store-date-time/ yazdığım bu makaleye göz atabilirsiniz


1
Ya timeZone almak istersem?
Geliştirici Webile

Bir $ this-> storeManager-> getStore () -> getConfig ('general / locale / timezone') bu kodu kullanarak saat dilimini alabilirsiniz. ve bunun için bağımlılık sınıfı \ Magento \ Store \ Model \ StoreManagerInterface $ storeManager,
Rajeev Singh

3

"Controller_action_predispatch" olayı olan gözlemci kullanarak mağaza saat dilimini ayarlayabiliriz

Mymodle / etc / frontend / events.xml klasöründe events.xml dosyasını oluşturun

<?xml version="1.0" encoding="UTF-8"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="controller_action_predispatch">
        <observer name="mymodule_timezone_set" instance="MyNamespace\Mymodule\Observer\SetStoreTimezoneObserver" />
    </event> </config>

Gözlemci klasöründe SetStoreTimezoneObserver.php dosyası oluşturun

<?php
namespace MyNamespace\Mymodule\Observer;

use Magento\Framework\Event\ObserverInterface;

class SetStoreTimezoneObserver implements ObserverInterface
{

    protected $_storeTime;
    protected $_storeManager;

    public function __construct(
        \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone,
        \Magento\Store\Model\StoreManagerInterface $storeManager
    )
    {
        $this->_storeTime = $timezone;
        $this->_storeManager = $storeManager;
        $this->setStoreTimezone();
    }

    /**
     * Retrieve store model instance
     *
     * @return \Magento\Store\Model\Store
     */
    public function getStore()
    {
        return $this->_storeManager->getStore();
    }

    /*
     * Set Store Timezone
     */
    public function setStoreTimezone()
    {
        date_default_timezone_set(
            $this->_storeTime->getConfigTimezone('store', $this->getStore())
        );
    }

    /**
     * Predispath admin action controller
     *
     * @param \Magento\Framework\Event\Observer $observer
     * @return void
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $this->setStoreTimezone();
    }
}

Şimdi “UTC” tarihi almak yerine, basit tarih ("Ymd H: i: s") işlevini kullanarak güncel mağaza tarihini alıyoruz.


2

Magento 2.x, farklı sınıflar için bağlam nesnelerine sahiptir, eğer bir Blok bağlamındaysanız, bağlam nesnesi size yerel tarih nesnesini aşağıdaki gibi verebilir:

/**
 * Locale Date/Timezone
 * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface
 */
protected $_timezone;

/**
 * @param \Magento\Catalog\Block\Product\Context $context
 * @param array $data
 */
public function __construct(
    \Magento\Catalog\Block\Product\Context $context,
    array $data = []
) {
    $this->_timezone = $context->getLocaleDate();
    parent::__construct(
        $context,
        $data
    );
}

o zaman aşağıdaki gibi kullanabilirsiniz:

$todayDate = $this->_timezone->date()->format('Y-m-d H:i:s');

Bu di: compile komutunu çalıştırırken hataları önleyecektir.


2

Belirli bir mağazanın güncel tarih saatini almak için (StoreManager'daki mevcut mağazanın dışında):

Dan referans \Magento\Framework\Stdlib\DateTime\Timezone::convertConfigTimeToUtc()

/** @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone */
/** @var \Magento\Framework\Stdlib\DateTime\Timezone $timezone */

$timezone = $this->timezone->getConfigTimezone(\Magento\Store\Model\ScopeInterface::SCOPE_STORES, $storeId);
$currentDate = new \DateTime('now', new \DateTimeZone($timezone));
var_dump($currentDate->format('Y-m-d H:i:s'));

\Magento\Framework\Stdlib\DateTime UTC tarih saatini, GMT tarih saatini veya mevcut mağazanın tarih saatini alır.

Magento 2 UTC'yi şu şekilde ayarlar app/bootstrap:

date_default_timezone_set('UTC');

\DateTimebu PHP zaman dilimi ayarını varsayılan olarak kullanır. Magento 2 dahili UTC'yi kullanacak ve aynı zamanda UTC'deki MySQL'de de tasarruf sağlayacak Linux sunucuları ve MySQL sunucuları genellikle UTC saat dilimine ayarlanır. Bir sunucudaki saat dilimi ayarlarının zinciri bu konu kapsamında değildir.

Magento 2 \Magento\Framework\Locale\Resolver, geçerli mağazanın saat dilimini (örn. Europe/Bruxelles) Almak için yerel çözümleyiciyi kullanarak geçerli mağazanın saat dilimindeki tarihi gösterir .


0

Benim durumumda, eğer bunu kontrol cihazımda kullanırsam, işe yaramaz. Bunun yerine varsayılan yerel tarihi alıyorum.

Ama blokumda kullanırsam çalışır.

\Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone
$todayDate = $this->_timezone->date()->format('Y-m-d H:i:s');
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.