Meskipun @drrcknlsn benar untuk menyatakan bahwa ada beberapa cara untuk mengonversi string waktu menjadi datatime, penting untuk disadari bahwa cara yang berbeda ini tidak menangani zona waktu dengan cara yang sama.
Pilihan 1 : DateTime('@' . $timestamp)
Perhatikan kode berikut:
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
The strtotime
bit menghilangkan informasi zona waktu, dan date_create
fungsi mengasumsikan GMT ( Europe/Brussels
).
Dengan demikian, hasilnya adalah sebagai berikut, di server mana pun saya menjalankannya:
2011-12-12T13:17:52+00:00
Pilihan 2 : date_create()->setTimestamp($timestamp)
Perhatikan kode berikut:
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
Anda mungkin berharap ini menghasilkan keluaran yang sama. Namun, jika saya menjalankan kode ini dari server Belgia, saya mendapatkan output berikut:
2011-12-12T14:17:52+01:00
Berbeda dengan date_create
fungsinya, setTimestamp
metode ini mengasumsikan zona waktu server ( 'Europe/Brussels'
dalam kasus saya) daripada GMT.
Menyetel zona waktu Anda secara eksplisit
Jika Anda ingin memastikan keluaran sesuai dengan zona waktu masukan Anda, sebaiknya setel secara eksplisit.
Perhatikan kode berikut:
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
Nah, perhatikan juga kode berikut ini:
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
Karena kami secara eksplisit mengatur zona waktu dari output agar sesuai dengan input, keduanya akan membuat output yang sama (benar):
2011-12-12T21:17:52+08:00