Apa format yang benar untuk lulus untuk date()
fungsi dalam PHP jika saya ingin memasukkan hasilnya ke MySQL datetime
jenis kolom?
I've telah mencoba date("Y-M-D G:i:s")
tapi itu hanya sisipan "0000-00-00 00:00:00" setiap kali.
Masalahnya adalah bahwa anda're menggunakan 'M'
dan 'D'
, yang merupakan representasi tekstual, MySQL mengharapkan representasi numerik dari format 2010-02-06 19:30:13
Coba: date("Y-m-d H:i:s")
yang menggunakan angka setara.
edit: beralih G
untuk H
, meskipun mungkin tidak memiliki dampak, anda mungkin ingin menggunakan format 24 jam dengan memimpin 0s.
Dari komentar-komentar dari php's date()
manual page:
<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>
Anda punya 'Y' yang benar - yang's setahun penuh, tapi 'M' adalah tiga karakter bulan, sementara 'm' adalah dua digit bulan. Masalah yang sama dengan 'D' bukan 'd'. 'G' adalah 1 atau 2 digit jam, di mana 'H' selalu memiliki awalan 0 jika diperlukan.
Berikut ini's solusi alternatif: jika anda memiliki tanggal di PHP sebagai timestamp, bypass penanganan dengan PHP dan biarkan DB mengurus mengubahnya dengan menggunakan FROM_UNIXTIME
fungsi.
mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)
mysql> select * from a_table;
+---------------------+
| a_date |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+
Saya menggunakan fungsi ini (PHP 7)
function getDateForDatabase(string $date): string {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
Versi PHP (PHP < 7)
function getDateForDatabase($date) {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
Ada tidak ada tidak perlu menggunakan date() method dari PHP jika anda don't menggunakan timestamp. Jika dateposted
adalah datetime kolom, anda dapat menyisipkan tanggal saat ini seperti ini:
$db->query("INSERT INTO table (dateposted) VALUES (now())");
Ini telah membuatku gila mencari jawaban yang sederhana. Akhirnya saya membuat fungsi ini yang tampaknya untuk menangkap semua input dan memberikan string SQL yang benar atau setidaknya valid dan checkable. Jika itu's 1999-12-31 itu's mungkin salah, tapi tidak't membuang yang buruk error di MySQL.
function MakeSQLDate($date) {
if (is_null($date)) {
//use 1999-12-31 as a valid date or as an alert
return date('Y-m-d', strtotime('1999-12-31'));
}
if (($t = strtotime($date)) === false) {
//use 1999-12-31 as a valid date or as an alert
return date('Y-m-d', strtotime('1999-12-31'));
} else {
return date('Y-m-d H:i:s', strtotime($date));
}
}
Menggunakan DateTime
kelas di PHP7+:
function getMysqlDatetimeFromDate(int $day, int $month, int $year): string {
$dt = new DateTime();
$dt->setTimezone(new DateTimeZone('UTC'));
$dt->setDate($year, $month, $day);
$dt->setTime(0, 0, 0, 0); // set tine to midnight
return $dt->format("Y-m-d H:i:s");
}
Kecil addendum untuk diterima jawaban: Jika database datetime
disimpan sebagai UTC (apa yang selalu saya lakukan), anda harus menggunakan gmdate("Y-m-d H:i:s")
bukan date("Y-m-d H:i:s")
.
Atau, jika anda lebih memilih untuk membiarkan MySQL menangani semuanya, karena beberapa jawaban sarankan, saya akan menyisipkan MySQL's UTC_TIMESTAMP
, dengan hasil yang sama.
Catatan: saya mengerti pertanyaan yang mengacu pada waktu saat ini.
Ini adalah cara yang lebih akurat untuk melakukannya. Itu tempat desimal di belakang detik memberikan lebih presisi.
php $sekarang = date('Y-m-d\TH:i:s.hingga', time());
Pemberitahuan .uP
.
Info lebih lanjut: https://stackoverflow.com/a/6153162/8662476