Saya sangat suka strtotime()
fungsinya, tetapi panduan pengguna tidak memberikan deskripsi lengkap tentang format tanggal yang didukung. strtotime('dd/mm/YYYY')
tidak berfungsi, hanya berfungsi dengan mm/dd/YYYY
format.
Jika saya memiliki tanggal dalam dd/mm/YYYY
format, bagaimana saya bisa mengubahnya YYYY-mm-dd
? Saya dapat melakukannya dengan menggunakan explode()
fungsi, tetapi saya pikir ada solusi yang lebih baik.
str_replace('/', '-', $date);
Jawaban:
Inilah solusi yang disederhanakan:
Hasil:
The
strtotime
dokumentasi berbunyi:sumber
echo date('Y-m-l', strtotime('01-01-2010'));
Hasilnya adalah2010-01-Friday
. Jadi hari yang akan datang di akhir, tergantung pada bagaimana Anda menentukan format tanggal untukdate
fungsi.$date = '25/05/2010'; $date = str_replace('/', '-', $date);
Baris tambahan tidak diperlukan untuk menyelesaikan masalah Anda.Anda dapat mem-parsing tanggal dari format khusus (pada PHP 5.3) dengan DateTime :: createFromFormat
(Selain:
!
Digunakan untuk mereset nilai yang tidak ditentukan ke cap waktu Unix, mis. Waktu akan menjadi tengah malam.)Jika Anda tidak ingin (atau tidak bisa) menggunakan PHP 5.3, maka daftar lengkap format tanggal / waktu yang tersedia yang diterima strtotime tercantum pada halaman manual Format Tanggal . Halaman itu lebih teliti menjelaskan fakta yang
m/d/Y
disimpulkand/m/Y
(tetapi Anda bisa, seperti disebutkan dalam jawaban di sini, menggunakand-m-Y
,d.m.Y
ataud\tm\tY
).Di masa lalu, saya juga menggunakan quicky yang
str_replace
disebutkan dalam jawaban lain, serta mengurai sendiri string tanggal ke dalam format lain sepertisumber
Ini adalah solusi yang bagus untuk banyak masalah:
sumber
Dari Langgan STRTOTIME Catatan:
Tanggal dalam format m / d / y atau dmy tidak jelas dengan melihat pemisah antara berbagai komponen: jika pemisah adalah garis miring (/), maka m / d / y Amerika diasumsikan; sedangkan jika pemisah adalah tanda hubung (-) atau titik (.), maka format dmy Eropa diasumsikan.
Sesederhana itu.
sumber
$t
dan$t1
menunjukkan hasil yang berbeda. Saya memeriksa seperti ini.$t=strtotime(date('d-m-Y'));
dan$t1=strtotime(date('m/d/Y'));
tercepat mungkin seharusnya
ini akan menghasilkan false jika formatnya tidak seperti yang seharusnya, tetapi tidak akan memeriksa apakah tanggalnya valid
sumber
Saya belum menemukan solusi yang lebih baik. Anda dapat menggunakan
explode()
,preg_match_all()
, dllSaya memiliki fungsi pembantu statis seperti ini
Mungkin ada nama yang lebih baik untuk itu, tetapi saya menggunakan
ausStrToTime()
karena itu bekerja dengan tanggal Australia (yang saya sering berurusan dengan, menjadi orang Australia). Nama yang lebih baik mungkin akan menjadi nama standar, tapi saya tidak yakin apa itu.sumber
Saya mencoba mengubah format ddmmyy ke
date("Y-m-d"
format tetapi tidak berfungsi ketika saya langsung lulusddmmyy =date('dmy')
kemudian menyadari itu harus dalam format yyyy-mm-dd begitu. substring digunakan untuk mengatur
lalu diteruskan ke
date("Y-m-d",strtotime($strParam));
itu berhasil!
sumber
$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');
Ini akan bekerja untuk Anda. Anda mengonversi String menjadi format tanggal khusus tempat Anda dapat menentukan ke PHP apa format asli dari String tersebut yang telah diberikan kepadanya. Sekarang format tanggal, Anda bisa mengonversinya ke format tanggal default PHP, yang sama dengan yang digunakan oleh MySQL.
sumber
Apakah Anda mendapatkan nilai ini dari database? Jika demikian, pertimbangkan untuk memformatnya di database (gunakan
date_format
di mysql, misalnya). Jika tidak, meledak nilainya mungkin merupakan taruhan terbaik, karena strtotime sepertinya tidak menghargai nilai dd / mm / yyyy.sumber
Jika Anda tahu itu dalam dd / mm / YYYY, Anda dapat melakukan:
Ini akan cocok dengan tanggal dalam bentuk d / m / YY atau dd / mm / YYYY (atau kombinasi keduanya) ...
Jika Anda ingin mendukung lebih banyak pemisah dari sekadar /, Anda dapat mengubah regex menjadi:
Dan kemudian tambahkan karakter yang Anda inginkan ke dalam
[/-]
bit (Catatan, - karakter harus yang terakhir)sumber
\d
untuk digit desimal daripada[/d]
untuk karakter garis miring atau d .Solusi ini lebih sederhana dan lebih elegan daripada meledak:
Anda tidak perlu tahu format apa yang Anda dapatkan tanggalnya, tetapi jika disertai dengan garis miring, mereka diganti dengan berhenti penuh dan diperlakukan sebagai Eropa oleh strtotime.
sumber
Solusi paling sederhana adalah ini:
sumber
Ini solusinya saya menggunakan bahkan jika nol terkemuka ada di sana.
sumber
$ date_info = '20 / 02/2019 '; tanggal gema ('Ym-d', strtotime (str_replace ('/', '-', $ date_info)));
sumber
Sesederhana ini
sumber