Bagaimana cara mengubah datetime ke ISO 8601 di PHP


103

Bagaimana cara mengubah waktu saya dari 2010-12-30 23:21:46ke format tanggal ISO 8601? (-_-;)


1
@Gordon ya saya mendapat sekitar 4.530 hasil dan saya menemukan jawaban dari @alex
wow

@ wow tolong tunjukkan mengapa tidak ada dari 4530 hasil menjawab pertanyaan Anda.
Gordon

1
@Gordon Saya masih belajar bagaimana menulis dari A ke Z tetapi saya menemukan mereka mengajari saya bagaimana menulis dari Z ke A :)
wow

@ Wow Tidak. Mereka mengajari Anda cara menulis alfabet ($ dari, $ ke). Hampir semuanya memberitahu Anda untuk menggunakan date($format, strtotime($dateString))atau DateTimeobjek yang setara. Mereka hanya berbeda dalam masukan untuk fungsi-fungsi tersebut. Yang harus Anda lakukan adalah pergi ke halaman yang sesuai dalam Manual PHP dan mencari tahu apa inputnya.
Gordon

3
@ Gordon Ya, apakah Anda benar. Saya hanya tahu alfabet dan sekarang mengeja waktu lebah. Semoga saya di sekolah yang tepat.
wow

Jawaban:


229

Berorientasi pada objek

Ini cara yang direkomendasikan.

$datetime = new DateTime('2010-12-30 23:21:46');

echo $datetime->format(DateTime::ATOM); // Updated ISO8601

Prosedural

Untuk versi PHP yang lebih lama, atau jika Anda lebih nyaman dengan kode prosedural.

echo date(DATE_ISO8601, strtotime('2010-12-30 23:21:46'));

3
Pertanyaannya, outputnya 2010-12-30T23:21:46+1100bagaimana membuatnya menjadi 2010-12-30T23:21:46+11:00?
wow

2
@wow Coba ini preg_replace('/(?<=\d{2})(?=\d{2}$)/', ':', '2010-12-30T23:21:46+1100'). Ini menghasilkan 2010-12-30T23:21:46+11:00.
alex


12
date('c', strtotime('2010-12-30 23:21:46'))bagus @Gordon :)
wow

8
Saya akan mencatat bahwa menggunakan DATE_ISO8601menghasilkan string tanggal yang sedikit berbeda dari ISO8601 (titik dua hilang di TZ, ISO8601 mengharapkan waktu menjadi semua dengan ATAU semua tanpa titik dua, bukan campuran) - date('c')menghasilkan tanggal valid ISO 8601 yang ketat - Hal ini dapat menyebabkan bug sulit dilacak jika kode mengharapkan format tanggal waktu ISO 8601 yang ketat. Ref: en.wikipedia.org/wiki/ISO_8601
ckm

38

Setelah PHP 5 Anda dapat menggunakan ini: echo date("c");format ISO 8601 datetime.

http://ideone.com/nD7piL

Catatan untuk komentar:

Sehubungan dengan ini , kedua ekspresi ini berlaku untuk zona waktu, untuk format dasar: ±[hh]:[mm], ±[hh][mm], or ±[hh].

Tetapi perhatikan bahwa, + 0X: 00 benar, dan + 0X00 salah untuk penggunaan yang diperpanjang. Jadi lebih baik digunakan date("c"). Diskusi serupa di sini .


1
Perhatikan sedikit perbedaan dengan DATE_ISO8601; +0X:00vs +0X00.
Ja͢ck

@ Ja͢ck apakah ini perlu down-voting? Sedikit perbedaan biasanya merupakan ide yang buruk.
rybo111

@ rybo111 Saya tidak melihat alasan untuk menolak jawaban ini; secara teknis, keduanya 'c'dan DATE_ISO8601menghasilkan representasi waktu ISO8601 yang valid.
Ja͢ck

Saya menambahkan catatan untuk menjawab.
trante

@ Ja͢ck DATE_ISO8601tidak menghasilkan representasi ISO8601 yang valid. DATE_ATOM melakukannya
Captain Obvious

4

Bagaimana mengkonversi dari ISO 8601 ke unixtimestamp:

strtotime('2012-01-18T11:45:00+01:00');
// Output : 1326883500

Cara mengonversi dari unixtimestamp ke ISO 8601 (server zona waktu):

date_format(date_timestamp_set(new DateTime(), 1326883500), 'c');
// Output : 2012-01-18T11:45:00+01:00

Cara mengonversi dari unixtimestamp ke ISO 8601 (GMT):

date_format(date_create('@'. 1326883500), 'c') . "\n";
// Output : 2012-01-18T10:45:00+00:00

Cara mengonversi dari unixtimestamp ke ISO 8601 (zona waktu khusus):

date_format(date_timestamp_set(new DateTime(), 1326883500)->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2012-01-18T05:45:00-05:00


1

Jika Anda mencoba menetapkan nilai di datetime-local

date("Y-m-d\TH:i",strtotime('2010-12-30 23:21:46'));

//output : 2010-12-30T23:21

Solusi serupa disebutkan dalam komentar yang diberikan untuk jawaban yang diterima
sushant047
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.