Saya mencoba mengonversi tanggal dari yyyy-mm-dd
menjadi dd-mm-yyyy
(tetapi tidak dalam SQL); namun saya tidak tahu bagaimana fungsi tanggal membutuhkan cap waktu, dan saya tidak bisa mendapatkan cap waktu dari string ini.
Bagaimana ini mungkin?
Saya mencoba mengonversi tanggal dari yyyy-mm-dd
menjadi dd-mm-yyyy
(tetapi tidak dalam SQL); namun saya tidak tahu bagaimana fungsi tanggal membutuhkan cap waktu, dan saya tidak bisa mendapatkan cap waktu dari string ini.
Bagaimana ini mungkin?
Jawaban:
Gunakan strtotime()
dan date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(Lihat dokumentasi strtotime dan tanggal di situs PHP.)
Perhatikan bahwa ini adalah solusi cepat untuk pertanyaan awal. Untuk konversi yang lebih luas, Anda harus benar-benar menggunakan DateTime
kelas untuk mem-parsing dan memformat :-)
Jika Anda ingin menghindari konversi strtotime (misalnya, strtotime tidak dapat mem-parsing input Anda), Anda dapat menggunakan,
$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');
Atau, yang setara:
$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');
Anda pertama kali memberinya format $ dateString. Kemudian Anda mengatakan format yang Anda inginkan $ newDateString.
Atau jika sumber-format selalu "Ymd" (yyyy-mm-dd), maka cukup gunakan DateTime :
<?php
$source = '2012-07-31';
$date = new DateTime($source);
echo $date->format('d.m.Y'); // 31.07.2012
echo $date->format('d-m-Y'); // 31-07-2012
?>
DateTime::createFromFormat()
- ini benar-benar lebih berguna daripadastrtotime()
strtotime()
berguna untuk mengubah format tipe benar (Ymd) ke format lain, tetapi DateTime::createFromFormat()
bersifat universal. Ini seperti STR_TO_DATE
di MySQL
strtotime()
Menggunakan:
implode('-', array_reverse(explode('-', $date)));
Tanpa tanggal konversi overhead, saya tidak yakin itu akan berarti banyak.
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
Kode ini berfungsi untuk setiap format tanggal.
Anda dapat mengubah urutan variabel pengganti seperti $ 3- $ 1- $ 2 karena format tanggal lama Anda.
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
Untuk lebih lanjut, lihat dokumentasi untukstrtotime
.
Atau bahkan lebih pendek:
$new_date = date('d-m-Y', strtotime(your date variable));
Juga kemungkinan lain yang tidak jelas:
$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];
Saya tidak tahu apakah saya akan menggunakannya tetapi masih :)
Catatan : Karena jawaban posting ini kadang-kadang dibatalkan, saya kembali ke sini untuk meminta orang-orang untuk tidak meningkatkan lagi. Jawaban saya kuno, tidak benar secara teknis, dan ada beberapa pendekatan yang lebih baik di sini. Saya hanya menyimpannya di sini untuk tujuan sejarah.
Meskipun dokumentasi dengan buruk menggambarkan fungsi strtotime, @rjmunro dengan benar membahas masalah ini dalam komentarnya: ini dalam format tanggal ISO "YYYY-MM-DD".
Juga, meskipun fungsi Date_Converter saya mungkin masih berfungsi, saya ingin memperingatkan bahwa mungkin ada pernyataan tidak tepat di bawah ini, jadi harap abaikan saja.
Jawaban yang paling banyak dipilih sebenarnya salah!
Manual strtotime PHP di sini menyatakan bahwa "Fungsi ini diharapkan akan diberikan string yang berisi format tanggal bahasa Inggris". Apa yang sebenarnya dimaksud adalah bahwa ia mengharapkan format tanggal Amerika AS, seperti "mdY" atau "m / d / Y".
Itu berarti bahwa tanggal yang disediakan sebagai "Ymd" dapat disalahartikan oleh strtotime
. Anda harus memberikan tanggal dalam format yang diharapkan.
Saya menulis sedikit fungsi untuk mengembalikan tanggal dalam beberapa format. Gunakan dan modifikasi sesuka hati. Jika ada yang mengubahnya menjadi kelas, saya akan senang jika itu akan dibagikan.
function Date_Converter($date, $locale = "br") {
# Exception
if (is_null($date))
$date = date("m/d/Y H:i:s");
# Let's go ahead and get a string date in case we've
# been given a Unix Time Stamp
if ($locale == "unix")
$date = date("m/d/Y H:i:s", $date);
# Separate Date from Time
$date = explode(" ", $date);
if ($locale == "br") {
# Separate d/m/Y from Date
$date[0] = explode("/", $date[0]);
# Rearrange Date into m/d/Y
$date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2];
}
# Return date in all formats
# US
$Return["datetime"]["us"] = implode(" ", $date);
$Return["date"]["us"] = $date[0];
# Universal
$Return["time"] = $date[1];
$Return["unix_datetime"] = strtotime($Return["datetime"]["us"]);
$Return["unix_date"] = strtotime($Return["date"]["us"]);
$Return["getdate"] = getdate($Return["unix_datetime"]);
# BR
$Return["datetime"]["br"] = date("d/m/Y H:i:s", $Return["unix_datetime"]);
$Return["date"]["br"] = date("d/m/Y", $Return["unix_date"]);
# Return
return $Return;
} # End Function
Ada dua cara untuk mengimplementasikan ini:
1.
$date = strtotime(date);
$new_date = date('d-m-Y', $date);
2.
$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y');
Anda dapat mencoba strftime()
fungsinya. Contoh sederhana:strftime($time, '%d %m %Y');
Gunakan fungsi ini untuk mengkonversi dari format apa saja ke format apa pun
function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
$date_aux = date_create_from_format($from_format, $date);
return date_format($date_aux,$to_format);
}
Diberikan di bawah ini adalah kode PHP untuk menghasilkan tanggal besok menggunakan mktime()
dan mengubah formatnya ke format dd / mm / yyyy dan kemudian mencetaknya menggunakan echo
.
$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
Untuk konversi khusus ini, kami juga dapat menggunakan string format.
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
Jelas ini tidak akan berfungsi untuk banyak konversi format tanggal lainnya, tetapi karena kami hanya mengatur ulang substring dalam kasus ini, ini adalah cara lain yang mungkin untuk melakukannya.
strtotime()
. :-)
function dateFormat($date) {
$m = preg_replace('/[^0-9]/', '', $date);
if (preg_match_all('/\d{2}+/', $m, $r)) {
$r = reset($r);
if ($r[2] <= 12 && $r[3] <= 31) return "$r[0]$r[1]-$r[2]-$r[3]";// Y-m-d
if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$r[2]$r[3]-$r[1]-$r[0]";// d-m-Y
if ($r[0] <= 12 && $r[1] <= 31) return "$r[2]$r[3]-$r[0]-$r[1]";// m-d-Y
if ($r[2] <= 31 && $r[3] <= 12) return "$r[0]$r[1]-$r[3]-$r[2]";//Y-m-d
}
}
var_dump(dateFormat('31/01/2000')); // return 2000-01-31
var_dump(dateFormat('01-31-2000')); // return 2000-01-31
var_dump(dateFormat('2000-31-01')); // return 2000-01-31
var_dump(dateFormat('20003101')); // return 2000-01-31
Cara sederhana Gunakan strtotime()
dan date()
:
$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));
Bersama waktu
$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));
Menggunakan date_create
dandate_format
Coba ini.
function formatDate($input, $output){
$inputdate = date_create($input);
$output = date_format($inputdate, $output);
return $output;
}