Sebagaimana dinyatakan dalam Literal Tanggal dan Waktu :
MySQL mengenali
DATE
nilai dalam format berikut:
Sebagai string dalam
'YYYY-MM-DD'
atau'YY-MM-DD'
format. Sintaks "santai" diizinkan:Karakter tanda baca apa pun dapat digunakan sebagai pembatas antara bagian tanggal. Misalnya,'2012-12-31'
,'2012/12/31'
,'2012^12^31'
, dan'[email protected] @31'
setara.Sebagai string tanpa pembatas di
'YYYYMMDD'
atau'YYMMDD'
format, asalkan string masuk akal sebagai tanggal. Misalnya,'20070523'
dan'070523'
ditafsirkan sebagai'2007-05-23'
, tapi'071332'
ilegal (memiliki bagian bulan dan hari yang tidak masuk akal) dan menjadi'0000-00-00'
.Sebagai angka dalam
YYYYMMDD
atauYYMMDD
format, asalkan nomor tersebut masuk akal sebagai tanggal. Misalnya,19830905
dan830905
ditafsirkan sebagai'1983-09-05'
.
Oleh karena itu, string '08/25/2012'
bukan literal tanggal MySQL yang valid. Anda memiliki empat opsi (dalam urutan preferensi yang tidak jelas, tanpa informasi lebih lanjut tentang kebutuhan Anda):
-
Konfigurasikan Datepicker untuk memberikan tanggal dalam format yang didukung menggunakan
altField
bersama denganaltFormat
pilihan :<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
Atau, jika Anda senang pengguna melihat tanggal di
YYYY-MM-DD
format, cukup aturdateFormat
pilihan sebagai gantinya:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
Gunakan MySQL
STR_TO_DATE( )
fungsi untuk mengubah string:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
-
Ubah string yang diterima dari jQuery menjadi sesuatu yang dipahami PHP sebagai tanggal, seperti
TanggalWaktu
objek:$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
dan kemudian:
-
dapatkan string berformat yang sesuai:
$date = $dt->format('Y-m-d');
-
dapatkan stempel waktu UNIX:
$timestamp = $dt->getTimestamp();
yang kemudian diteruskan langsung ke
FROM_UNIXTIME()
fungsi:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Manipulasi string secara manual menjadi literal yang valid:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Peringatan
-
Kode Anda rentan terhadap injeksi SQL. Anda benar-benar harus menggunakan pernyataan yang disiapkan , tempat Anda meneruskan variabel sebagai parameter yang tidak dievaluasi untuk SQL. Jika Anda tidak tahu apa yang saya bicarakan, atau cara memperbaikinya, baca kisah Meja Bobby .
-
Juga, seperti yang dinyatakan dalam pendahuluan ke bab manual PHP di
mysql_*
fungsi:Ekstensi ini tidak digunakan lagi pada PHP 5.5.0, dan tidak disarankan untuk menulis kode baru karena akan dihapus di masa mendatang. Sebagai gantinya, mysqli atau PDO_MySQL ekstensi harus digunakan. Lihat juga Ikhtisar MySQL API untuk bantuan lebih lanjut saat memilih API MySQL.
-
Anda tampaknya menggunakan
DATETIME
atauTIMESTAMP
kolom untuk menyimpan nilai tanggal; Saya sarankan Anda mempertimbangkan untuk menggunakanDATE
MySQL ketik sebagai gantinya. Seperti yang dijelaskan dalamDATE
,DATETIME
, danTIMESTAMP
Jenis :Tanggal
TANGGAL
type digunakan untuk nilai dengan bagian tanggal tetapi tidak ada bagian waktu. MySQL mengambil dan menampilkan nilai DATE di'YYYY-MM-DD'
format. Rentang yang didukung adalah'1000-01-01'
ke'9999-12-31'
.DATETIME
type digunakan untuk nilai yang berisi bagian tanggal dan waktu. MySQL mengambil dan menampilkanDATETIME
nilai dalam'YYYY-MM-DD HH:MM:SS'
format. Rentang yang didukung adalah'1000-01-01 00:00:00'
ke'9999-12-31 23:59:59'
.TIMESTAMP
tipe data digunakan untuk nilai yang berisi bagian tanggal dan waktu.TIMESTAMP
memiliki rentang'1970-01-01 00:00:01'
UTC ke'2038-01-19 03:14:07'
UTC.