जवाबों:
आपको अपने क्लास कंस्ट्रक्टर में इंजेक्शन लगाना होगा \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')
या किसी अन्य समय प्रारूप के साथ विधि को कॉल कर सकते हैं ।
Magento2 में UTC दिनांक प्राप्त करने के लिए आपको उपयोग करना चाहिए\Magento\Framework\Stdlib\DateTime\DateTime::gmtDate();
आपको निर्माण के माध्यम से इस वर्ग पर निर्भरता को इंजेक्ट करना चाहिए और फिर इस फ़ंक्शन का उपयोग करना चाहिए। अधिक तिथि / समय संबंधित तरीकों के लिए इस वर्ग को देखें।
आपके कोड सैंपल में आप UTC तारीख को पुनः प्राप्त कर रहे हैं, स्टोर की तारीख को नहीं। वर्तमान स्टोर के टाइमज़ोन के अनुसार दिनांकित फॉर्म प्राप्त करने के लिए , उपयोग करने के लिए
Magento\Framework\Stdlib\DateTime\TimezoneInterface::formatDate();
(फिर से, निर्माण निर्भरता को इंजेक्ट करके)
\Magento\Framework\Stdlib\DateTime\DateTime::gmtTimestamp()
आप अपने क्लास कंस्ट्रक्टर में इंजेक्शन \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/
हम घटना "कंट्रोलर_एक्शन_प्रिस्पेडचैच" के साथ प्रेक्षक का उपयोग करके स्टोर टाइमज़ोन सेट कर सकते हैं
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") फ़ंक्शन का उपयोग करके वर्तमान स्टोर तिथि प्राप्त करते हैं।
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');
डि को निष्पादित करते समय यह त्रुटियों से बचेंगे: कमांड संकलित करें।
किसी विशेष स्टोर (स्टोरमैन में वर्तमान स्टोर के अलावा) की वर्तमान तिथि समय प्राप्त करने के लिए:
से संदर्भ \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
) प्राप्त करने के लिए स्थानीय रिज़ॉल्वर का उपयोग किया जा सके ।
मेरे मामले में, अगर मैं अपने नियंत्रक पर इसका उपयोग करता हूं, तो यह काम नहीं करता है। मुझे इसके बजाय डिफ़ॉल्ट लोकेल की तारीख मिलती है।
लेकिन अगर मैं इसे अपने ब्लॉक पर उपयोग करता हूं तो यह काम करता है।
\Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone
$todayDate = $this->_timezone->date()->format('Y-m-d H:i:s');