Magento 2 वर्तमान स्टोर की तारीख का समय प्राप्त करें


25

Magento 1.x में आप स्टोर की तारीख समय के माध्यम से प्राप्त कर सकते हैं

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

Magento 2.x में इसके बराबर क्या होगा?

जवाबों:


42

आपको अपने क्लास कंस्ट्रक्टर में इंजेक्शन लगाना होगा \Magento\Framework\Stdlib\DateTime\DateTimeऔर उस एक का उपयोग करना होगा।
कुछ इस तरह:

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

फिर, आप अपनी कक्षा में इसका उपयोग कर सकते हैं:

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

1
यह gmt तारीख देता है कि वर्तमान स्टोर
टाइमज़ोन

मैंने यह कोशिश की है, लेकिन यह हमेशा 5 घंटे का अंतर देता है क्या आप मेरी मदद कर सकते हैं
नवेंबोस

केवल समय कैसे प्राप्त करें?
संजय गोहिल

2
@SanjayGohil। gmtDateऊपर दी गई विधि 2 वैकल्पिक मापदंडों को स्वीकार करती है। पहला वह है $formatजो करने के लिए चूक है Y-m-d H:i:s। आप केवल इच्छित पैरामीटर gmtDate('H:i:s')या किसी अन्य समय प्रारूप के साथ विधि को कॉल कर सकते हैं ।
मेरियस

इस पद्धति द्वारा / तारीख से महीनों को कैसे जोड़ / घटाया जाए?
अजवाड़ सैयद

18

Magento2 में UTC दिनांक प्राप्त करने के लिए आपको उपयोग करना चाहिए\Magento\Framework\Stdlib\DateTime\DateTime::gmtDate();

आपको निर्माण के माध्यम से इस वर्ग पर निर्भरता को इंजेक्ट करना चाहिए और फिर इस फ़ंक्शन का उपयोग करना चाहिए। अधिक तिथि / समय संबंधित तरीकों के लिए इस वर्ग को देखें।

आपके कोड सैंपल में आप UTC तारीख को पुनः प्राप्त कर रहे हैं, स्टोर की तारीख को नहीं। वर्तमान स्टोर के टाइमज़ोन के अनुसार दिनांकित फॉर्म प्राप्त करने के लिए , उपयोग करने के लिए Magento\Framework\Stdlib\DateTime\TimezoneInterface::formatDate();(फिर से, निर्माण निर्भरता को इंजेक्ट करके)


वर्तमान स्टोर टाइमज़ोन के लिए यह फ़ंक्शन मुझे केवल तारीख नहीं समय देता है तो मुझे समय भी कैसे मिल सकता है?
ND17

एक नजर \Magento\Framework\Stdlib\DateTime\DateTime::gmtTimestamp()
डालिए

12

आप अपने क्लास कंस्ट्रक्टर में इंजेक्शन \Magento\Framework\Stdlib\DateTime\TimezoneInterfaceलगाकर आसानी से करंट स्टोर की तारीख का समय प्राप्त कर सकते हैं और उस डेटऑबजेक्ट को प्राप्त करने के लिए उपयोग कर सकते हैं।

उदाहरण के लिए:

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

और फिर आप इसे निम्नानुसार उपयोग कर सकते हैं:

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

विभिन्न स्वरूपों के बारे में अधिक जानकारी के लिए आप इस लेख पर एक नज़र डाल सकते हैं जो मैंने लिखा था https://codeblog.experius.nl/magento-2-get-current-store-date-time/


1
क्या होगा अगर मैं timeZone प्राप्त करना चाहता हूँ ??
डेवलपर वेबल

कोई इस कोड का उपयोग करके समयक्षेत्र प्राप्त कर सकता है $-> storeManager-> getStore () -> getConfig ('सामान्य / स्थानीय / समयक्षेत्र')। और इसके लिए निर्भरता वर्ग \ Magento \ Store \ Model \ StoreManagerInterface $ storeManager होगा,
राजीव सिंह

3

हम घटना "कंट्रोलर_एक्शन_प्रिस्पेडचैच" के साथ प्रेक्षक का उपयोग करके स्टोर टाइमज़ोन सेट कर सकते हैं

Mymodle / etc / frontend / event.xml फ़ोल्डर में event.xml बनाएँ

<?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>

ऑब्जर्वर फोल्डर में SetStoreTimezoneObserver.php फ़ाइल बनाएँ

<?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();
    }
}

अब "UTC" तिथि प्राप्त करने के बजाय, हम साधारण तिथि ("Ymd H: i: s") फ़ंक्शन का उपयोग करके वर्तमान स्टोर तिथि प्राप्त करते हैं।


2

Magento 2.x में विभिन्न वर्गों के लिए संदर्भ वस्तुएं हैं, यदि आप ब्लॉक के संदर्भ में हैं तो संदर्भ वस्तु आपको स्थानीय तिथि वस्तु दे सकती है:

/**
 * 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
    );
}

तो आप इसे निम्नलिखित की तरह उपयोग कर सकते हैं:

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

डि को निष्पादित करते समय यह त्रुटियों से बचेंगे: कमांड संकलित करें।


2

किसी विशेष स्टोर (स्टोरमैन में वर्तमान स्टोर के अलावा) की वर्तमान तिथि समय प्राप्त करने के लिए:

से संदर्भ \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 तिथि समय, GMT दिनांक समय या वर्तमान स्टोर का दिनांक समय मिलेगा।

Magento के 2 सेट UTC में app/bootstrap:

date_default_timezone_set('UTC');

\DateTimeडिफ़ॉल्ट रूप से इस PHP टाइमज़ोन सेटिंग का उपयोग करता है। Magento 2 आंतरिक रूप से UTC का उपयोग करेगा और यह UTC में MySQL में भी बचाता है। लिनक्स सर्वर और MySQL सर्वर आमतौर पर यूटीसी टाइमज़ोन पर सेट होते हैं। सर्वर पर टाइमज़ोन सेटिंग्स की श्रृंखला इस विषय के दायरे में नहीं है।

Magento 2 वर्तमान दुकान के टाइमज़ोन में वर्तमान तिथि को प्रदर्शित करेगा \Magento\Framework\Locale\Resolverताकि वर्तमान स्टोर टाइमज़ोन (जैसे Europe/Bruxelles) प्राप्त करने के लिए स्थानीय रिज़ॉल्वर का उपयोग किया जा सके ।


0

मेरे मामले में, अगर मैं अपने नियंत्रक पर इसका उपयोग करता हूं, तो यह काम नहीं करता है। मुझे इसके बजाय डिफ़ॉल्ट लोकेल की तारीख मिलती है।

लेकिन अगर मैं इसे अपने ब्लॉक पर उपयोग करता हूं तो यह काम करता है।

\Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone
$todayDate = $this->_timezone->date()->format('Y-m-d H:i:s');
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.