Apakah ada cara sederhana untuk mengubah satu format tanggal menjadi format tanggal lain di PHP?
Aku punya ini:
$old_date = date('y-m-d-h-i-s'); // works
$middle = strtotime($old_date); // returns bool(false)
$new_date = date('Y-m-d H:i:s', $middle); // returns 1970-01-01 00:00:00
Tapi tentu saja saya lebih suka mengembalikan tanggal saat ini daripada celah fajar. Apa yang saya lakukan salah?
Jawaban:
Parameter kedua
date()
harus berupa cap waktu yang tepat (detik sejak 1 Januari 1970). Anda melewatkan string, yang tanggal () tidak dapat dikenali.Anda dapat menggunakan strtotime () untuk mengubah string tanggal menjadi stempel waktu. Namun, bahkan strtotime () tidak mengenali
y-m-d-h-i-s
format.PHP 5.3 dan lebih tinggi
Gunakan
DateTime::createFromFormat
. Ini memungkinkan Anda untuk menentukan mask yang tepat - menggunakandate()
sintaks - untuk mengurai tanggal string masuk dengan.PHP 5.2 dan lebih rendah
Anda harus mengurai elemen (tahun, bulan, hari, jam, menit, detik) secara manual menggunakan
substr()
dan menyerahkan hasilnya ke mktime () yang akan membuat Anda cap waktu.Tapi itu banyak pekerjaan! Saya sarankan menggunakan format berbeda yang dapat dimengerti strftime (). strftime () memahami setiap tanggal pendek masukan dari
the next time joe will slip on the ice
. misalnya, ini berfungsi:sumber
DateTime
ada sejak PHP 5.2 dalam inti PHP dan dukungan eksperimental untukDateTime
dapat diaktifkan untuk PHP 5.1 saat dikompilasi. secure.php.net/manual/en/datetime.installation.phpCara termudah untuk melakukannya adalah
Anda pertama kali memberinya format $ dateString. Kemudian Anda mengatakan format yang Anda inginkan $ newDateString.
Ini juga menghindari penggunaan strtotime, yang kadang-kadang sulit diatasi.
Jika Anda tidak mengubah dari satu format tanggal ke yang lain, tetapi hanya ingin tanggal saat ini (atau datetime) dalam format tertentu maka itu bahkan lebih mudah:
Pertanyaan lain ini juga merujuk ke topik yang sama: Konversi format tanggal yyyy-mm-dd => dd-mm-yyyy .
sumber
$timestring = $now->format('Y-m-d h:i:s');
pasti?m
selama berbulan-bulan,i
selama beberapa menitDasar
Cara simplist untuk mengkonversi satu format tanggal ke yang lain adalah dengan menggunakan
strtotime()
dengandate()
.strtotime()
akan mengubah tanggal menjadi Cap Waktu Unix . Stempel Waktu Unix itu kemudian dapat diteruskan kedate()
untuk mengubahnya menjadi format baru.Atau sebagai one-liner:
Ingatlah bahwa
strtotime()
tanggal harus dalam format yang valid . Kegagalan untuk memberikan format yang valid akan menghasilkanstrtotime()
false kembali yang akan menyebabkan tanggal Anda menjadi 1969-12-31.Menggunakan
DateTime()
Pada PHP 5.2, PHP menawarkan
DateTime()
kelas yang menawarkan alat yang lebih kuat untuk bekerja dengan tanggal (dan waktu). Kami dapat menulis ulang kode di atas menggunakanDateTime()
:Bekerja dengan cap waktu Unix
date()
mengambil timeatamp Unix sebagai parameter kedua dan mengembalikan tanggal yang diformat untuk Anda:DateTime () berfungsi dengan cap waktu Unix dengan menambahkan
@
sebelum cap waktu:Jika cap waktu yang Anda miliki dalam milidetik (mungkin berakhir pada
000
dan / atau cap waktu tiga belas karakter) Anda harus mengonversinya menjadi detik sebelum Anda dapat mengubahnya ke format lain. Ada dua cara untuk melakukan ini:substr()
Memotong tiga digit terakhir dapat dicapai dengan beberapa cara, tetapi menggunakan
substr()
adalah yang paling mudah:Anda juga dapat mengubah timestamp menjadi detik dengan membaginya dengan 1000. Karena timestamp terlalu besar untuk sistem 32 bit untuk mengerjakan matematika, Anda perlu menggunakan perpustakaan BCMath untuk melakukan matematika sebagai string:
Untuk mendapatkan Cap Waktu Unix Anda dapat menggunakan
strtotime()
yang mengembalikan Cap Waktu Unix:Dengan DateTime () Anda dapat menggunakan
DateTime::getTimestamp()
Jika Anda menjalankan PHP 5.2, Anda dapat menggunakan
U
opsi pemformatan:Bekerja dengan format tanggal yang tidak standar dan ambigu
Sayangnya tidak semua tanggal yang harus dikerjakan pengembang dalam format standar. Untungnya PHP 5.3 memberi kami solusi untuk itu.
DateTime::createFromFormat()
memungkinkan kita memberi tahu PHP apa format string tanggal sehingga dapat dengan mudah diuraikan menjadi objek DateTime untuk manipulasi lebih lanjut.Di PHP 5.4 kami memperoleh kemampuan untuk melakukan akses anggota kelas di instantiation telah ditambahkan yang memungkinkan kami untuk mengubah
DateTime()
kode kami menjadi satu-baris:sumber
Coba ini:
sumber
Untuk mengkonversi
$date
daridd-mm-yyyy hh:mm:ss
ke datetime MySQL yang tepat saya pergi seperti ini:sumber
Fatal error: Call to a member function format() on a non-object
. Hanya kepala!Berikut ini adalah metode mudah untuk mengonversi tanggal ke format yang berbeda.
sumber
Anda melakukan kesalahan di sini, ini seharusnya
pemisah waktu adalah ':'
Saya pikir ini akan membantu ...
ATAU
sumber
Cara asli ini akan membantu mengonversi format apa pun yang dimasukkan ke format yang diinginkan.
sumber
Anda perlu mengubah $ old_date kembali menjadi stempel waktu, karena fungsi tanggal memerlukan stempel waktu sebagai argumen kedua.
sumber
strtotime akan menyelesaikannya. tanggalnya tidak sama dan semuanya dalam format-us.
sumber
Coba ini:
sumber
Ini dipecahkan untuk saya,
Output: 2018-04-18
sumber
Ini adalah cara lain Anda dapat mengonversi format tanggal
sumber
Hanya menggunakan string, bagi saya adalah solusi yang bagus, lebih sedikit masalah dengan mysql. Mendeteksi format saat ini dan mengubahnya jika perlu, solusi ini hanya untuk format Spanyol / Perancis dan format bahasa Inggris, tanpa menggunakan fungsi waktu dat php.
MENGGUNAKAN
sumber
Saya tahu ini sudah tua, tetapi, ketika bertemu dengan vendor yang secara tidak konsisten menggunakan 5 format tanggal yang berbeda di API mereka (dan menguji server dengan berbagai versi PHP mulai dari 5 hingga 7 terbaru), saya memutuskan untuk menulis konverter universal yang bekerja dengan berbagai versi PHP.
Konverter ini akan mengambil hampir semua input, termasuk format datetime standar apa pun (termasuk dengan atau tanpa milidetik) dan representasi Epoch Time (termasuk dengan atau tanpa milidetik) dan mengubahnya menjadi hampir semua format lain.
Untuk menyebutnya:
Mengirim null untuk format akan membuat fungsi mengembalikan datetime dalam Epoch / Unix Time. Kalau tidak, kirim string format apa pun yang didukung date (), juga dengan ".u" selama milidetik (saya juga menangani milidetik, meskipun date () mengembalikan nol).
Ini kodenya:
Berikut ini beberapa contoh panggilan - Anda akan mencatatnya juga menangani data zona waktu apa pun (meskipun seperti yang disebutkan di atas, setiap waktu non GMT dikembalikan di zona waktu Anda).
Inilah hasilnya:
Satu-satunya hal yang tidak ada dalam versi ini adalah kemampuan untuk memilih zona waktu yang Anda inginkan dalam datetime yang dikembalikan. Awalnya, saya menulis ini untuk mengubah datetime apa pun menjadi Epoch Time, jadi, saya tidak memerlukan dukungan zona waktu. Sepele untuk ditambahkan.
sumber