Apa format yang benar untuk diteruskan ke date()
fungsi dalam PHP jika saya ingin memasukkan hasilnya ke dalam datetime
kolom tipe MySQL ?
Saya sudah mencoba date("Y-M-D G:i:s")
tetapi itu hanya menyisipkan "0000-00-00 00:00:00" setiap kali.
Apa format yang benar untuk diteruskan ke date()
fungsi dalam PHP jika saya ingin memasukkan hasilnya ke dalam datetime
kolom tipe MySQL ?
Saya sudah mencoba date("Y-M-D G:i:s")
tetapi itu hanya menyisipkan "0000-00-00 00:00:00" setiap kali.
Jawaban:
Masalahnya adalah bahwa Anda menggunakan 'M'
dan 'D'
, yang merupakan representasi tekstual, MySQL mengharapkan representasi numerik dari format tersebut2010-02-06 19:30:13
Coba: date("Y-m-d H:i:s")
yang menggunakan persamaan numerik.
sunting: beralih G
ke H
, meskipun mungkin tidak berdampak, Anda mungkin ingin menggunakan format 24 jam dengan 0s terkemuka.
Dari komentar date()
halaman manual php :
<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>
Anda memiliki 'Y' yang benar - itu setahun penuh, tetapi 'M' adalah bulan tiga karakter, sedangkan 'm' adalah bulan dua digit. Masalah yang sama dengan 'D' bukannya 'd'. 'G' adalah jam 1 atau 2 digit, di mana 'H' selalu memiliki 0 di depan ketika dibutuhkan.
Berikut ini solusi alternatif: jika Anda memiliki tanggal dalam PHP sebagai timestamp, memotong penanganannya dengan PHP dan biarkan DB berhati-hati 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 kode PHP berikut untuk membuat variabel yang saya masukkan ke dalam kolom MySQL DATETIME.
$datetime = date_create()->format('Y-m-d H:i:s');
Ini akan menahan Tanggal dan Waktu server saat ini.
$date_old = '23-5-2016 23:15:23';
//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));
//Format should be like 'Y-m-d H:i:s'`enter code here`
Memformat stempel waktu ke kolom MySQL DATETIME:
strftime('%Y-%m-%d %H:%M:%S',$timestamp);
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 yang lebih lama (PHP <7)
function getDateForDatabase($date) {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
function getDateForDatabase(string $date) : string {
untuk function getDateForDatabase($date) {
Mengapa deklarasi tipe melempar kesalahan saya tidak tahu cukup PHP untuk memberitahu.
Tidak perlu menggunakan metode date () dari PHP jika Anda tidak menggunakan timestamp. Jika dateposted
kolom datetime, Anda dapat memasukkan tanggal saat ini seperti ini:
$db->query("INSERT INTO table (dateposted) VALUES (now())");
Ini membuat saya gila mencari jawaban sederhana. Akhirnya saya membuat fungsi ini yang sepertinya menangkap semua input dan memberikan string SQL yang baik yang benar atau setidaknya valid dan dapat diperiksa. Jika 1999-12-31 mungkin salah tetapi tidak akan membuat kesalahan buruk 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");
}
Sebuah addendum kecil untuk jawaban diterima: 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 suka membiarkan MySQL menangani semuanya, seperti beberapa jawaban sarankan, saya akan memasukkan MySQL UTC_TIMESTAMP
, dengan hasil yang sama.
Catatan: Saya mengerti pertanyaan yang merujuk pada waktu saat ini.
Ini adalah cara yang lebih akurat untuk melakukannya. Ini menempatkan desimal di belakang detik memberikan lebih presisi.
$now = date('Y-m-d\TH:i:s.uP', time());
Perhatikan .uP
.
Info lebih lanjut: https://stackoverflow.com/a/6153162/8662476