উত্তর:
আপনার ক্লাস কনস্ট্রাক্টর ইনজেক্ট করতে হবে \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 টি alচ্ছিক পরামিতি গ্রহণ করে। প্রথমটি $format
যা ডিফল্ট হয় Y-m-d H:i:s
। আপনি যে প্যারামিটারটি চান তা gmtDate('H:i:s')
বা অন্য কোনও সময়ের ফর্ম্যাট দিয়ে কেবল পদ্ধতিটি কল করতে পারেন ।
Magento2 এ ইউটিসি তারিখ পেতে আপনার ব্যবহার করা উচিত\Magento\Framework\Stdlib\DateTime\DateTime::gmtDate();
আপনার নির্মাণের মাধ্যমে এই শ্রেণীর উপর নির্ভরতা ইনজেকশন করা উচিত এবং তারপরে এই ফাংশনটি ব্যবহার করুন। আরও তারিখ / সময় সম্পর্কিত পদ্ধতির জন্য এই শ্রেণিটি দেখুন।
আপনার কোডের নমুনায় আপনি ইউটিসি তারিখ পুনরুদ্ধার করছেন, সঞ্চয় করার তারিখ নয়। বর্তমান স্টোরের সময় অঞ্চল অনুযায়ী তারিখ ফর্ম্যাট করতে , ব্যবহার করুন
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-c موجودہ- store- date- time/
"কন্ট্রোলার_অ্যাকশন_প্রেডিস্পাচ" ইভেন্টের সাথে আমরা পর্যবেক্ষক ব্যবহার করে স্টোর টাইমজোন সেট করতে পারি
মাইমডল / ইত্যাদি / ফ্রন্টএন্ড / ইভেন্ট.এক্সএমএল ফোল্ডারে ইভেন্ট.এক্সএমএল তৈরি করুন
<?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>
পর্যবেক্ষক ফোল্ডারে সেটস্টোরটাইমজোনঅবার্সার.পিপি ফাইল তৈরি করুন
<?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();
}
}
এখন "ইউটিসি" তারিখ পাওয়ার পরিবর্তে, আমরা সাধারণ তারিখ ("ওয়াইএমডি এইচ: আই: এস") ফাংশনটি ব্যবহার করে বর্তমান স্টোর তারিখ পাই।
ম্যাজেন্টো ২.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');
Di: কম্পাইল কমান্ড কার্যকর করার সময় এটি ত্রুটিগুলি এড়াতে পারে।
নির্দিষ্ট স্টোরের বর্তমান তারিখের সময় পেতে (স্টোর ম্যানেজারের বর্তমান স্টোর ব্যতীত):
থেকে রেফারেন্স \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
আপনাকে ইউটিসি তারিখের সময়, জিএমটি তারিখের সময় বা বর্তমান স্টোরের তারিখের সময় পাবেন।
ম্যাজেন্টো 2 টি ইউটিসি সেট করে app/bootstrap
:
date_default_timezone_set('UTC');
\DateTime
এই পিএইচপি টাইমজোন সেটিংটি ডিফল্টরূপে ব্যবহার করে। ম্যাজেন্টো 2 অভ্যন্তরীণ ইউটিসি ব্যবহার করবে এবং এটি ইউটিসি-তে মাইএসকিউএল-তেও সঞ্চয় করে। লিনাক্স সার্ভার এবং মাইএসকিউএল সার্ভারগুলি সাধারণত ইউটিসি টাইমজোনতে সেট করা থাকে। কোনও সার্ভারে টাইমজোন সেটিংসের শৃঙ্খলা এই বিষয়টির আওতায় নেই।
ম্যাজেন্টো 2 \Magento\Framework\Locale\Resolver
বর্তমান স্টোর টাইমজোন (উদাঃ Europe/Bruxelles
) পেতে লোকেলের রেজোলভার ব্যবহার করে বর্তমান স্টোরের টাইমজোনটিতে সামনের তারিখে প্রদর্শিত হবে ।
আমার ক্ষেত্রে, আমি যদি এটি আমার নিয়ামকটিতে ব্যবহার করি তবে এটি কার্যকর হয় না। পরিবর্তে আমি ডিফল্ট লোকেলের তারিখ পাই।
তবে আমি যদি এটি আমার ব্লকে ব্যবহার করি তবে এটি কাজ করে।
\Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone
$todayDate = $this->_timezone->date()->format('Y-m-d H:i:s');