Di Magento 1.x Anda bisa mendapatkan waktu tanggal toko via
Mage::getModel('core/date')->gmtDate();
Apa yang akan setara dengan ini di Magento 2.x?
Anda perlu menyuntikkan konstruktor kelas Anda contoh \Magento\Framework\Stdlib\DateTime\DateTime
dan menggunakannya.
Sesuatu seperti ini:
protected $date;
public function __construct(
....
\Magento\Framework\Stdlib\DateTime\DateTime $date,
....
) {
....
$this->date = $date;
....
}
Kemudian, Anda dapat menggunakan di kelas Anda ini:
$date = $this->date->gmtDate();
gmtDate
ditunjukkan di atas menerima 2 parameter opsional. Yang pertama adalah$format
defaultY-m-d H:i:s
. Anda bisa memanggil metode dengan parameter yang Anda inginkangmtDate('H:i:s')
atau format waktu lainnya.Untuk mendapatkan tanggal UTC di Magento2, Anda harus menggunakan
\Magento\Framework\Stdlib\DateTime\DateTime::gmtDate();
Anda harus menyuntikkan ketergantungan pada kelas ini melalui konstruk dan kemudian menggunakan fungsi ini. Lihat kelas ini untuk metode terkait tanggal / waktu lainnya.
Dalam contoh kode Anda, Anda mengambil tanggal UTC, bukan tanggal toko. Untuk mendapatkan tanggal yang diformat sesuai dengan zona waktu toko saat ini , gunakan
Magento\Framework\Stdlib\DateTime\TimezoneInterface::formatDate();
(lagi, dengan menyuntikkan ketergantungan untuk membangun)sumber
\Magento\Framework\Stdlib\DateTime\DateTime::gmtTimestamp()
Anda dapat dengan mudah mendapatkan Waktu Tanggal Toko Saat Ini dengan menyuntikkan konstruktor kelas Anda secara instan
\Magento\Framework\Stdlib\DateTime\TimezoneInterface
dan menggunakannya untuk mendapatkan DateObject.Sebagai contoh:
Dan kemudian Anda dapat menggunakannya sebagai berikut:
Untuk informasi lebih lanjut tentang berbagai format Anda dapat melihat artikel ini saya menulis https://codeblog.experius.nl/magento-2-get-current-store-date-time/
sumber
Kita dapat mengatur zona waktu toko menggunakan pengamat dengan event "controller_action_predispatch"
Buat events.xml di folder Mymodle / etc / frontend / events.xml
Di folder Observer buat file SetStoreTimezoneObserver.php
Sekarang alih-alih mendapatkan tanggal "UTC", kami mendapatkan tanggal toko saat ini menggunakan fungsi tanggal sederhana ("Ymd H: i: s").
sumber
Magento 2.x memiliki objek konteks untuk kelas yang berbeda, jika Anda berada dalam konteks Blok maka objek konteks dapat memberi Anda objek tanggal lokal sebagai berikut:
maka Anda dapat menggunakannya seperti berikut:
Ini akan menghindari kesalahan saat menjalankan perintah di: compile.
sumber
Untuk mendapatkan waktu tanggal saat ini dari toko tertentu (selain toko saat ini di StoreManager):
Referensi dari
\Magento\Framework\Stdlib\DateTime\Timezone::convertConfigTimeToUtc()
\Magento\Framework\Stdlib\DateTime
akan memberi Anda waktu tanggal UTC, waktu tanggal GMT atau waktu tanggal toko saat ini.Magento 2 menyetel UTC ke dalam
app/bootstrap
:\DateTime
menggunakan pengaturan zona waktu PHP ini secara default. Magento 2 akan menggunakan UTC internal dan menyimpan di MySQL dalam UTC juga. Server Linux dan server MySQL biasanya diatur ke zona waktu UTC. Rantai pengaturan zona waktu pada server tidak dalam cakupan topik ini.Magento 2 akan ditampilkan di frontend tanggal di zona waktu toko saat ini menggunakan penyelesai lokal
\Magento\Framework\Locale\Resolver
untuk mendapatkan zona waktu toko saat ini (misalnyaEurope/Bruxelles
).sumber
Dalam kasus saya, jika saya menggunakan ini pada controller saya, itu tidak berfungsi. Saya mendapatkan tanggal lokal default sebagai gantinya.
Tetapi jika saya menggunakannya di blok saya itu berfungsi.
sumber