Come indicato in Valori letterali di data e ora :
MySQL riconosce DATE
valori in questi formati:
-
Come stringa in
'YYYY-MM-DD'
o'AA-MM-GG'
formato. È consentita una sintassi "rilassata":qualsiasi carattere di punteggiatura può essere utilizzato come delimitatore tra le parti della data. Ad esempio,'2012-12-31'
,'31/12/2012'
,'2012^12^31'
e'[email protected] @31'
sono equivalenti. -
Come stringa senza delimitatori in
'YYYYMMDD'
o'AAMMGG'
format, a condizione che la stringa abbia senso come data. Ad esempio,'20070523'
e'070523'
vengono interpretati come'2007-05-23'
, ma'071332'
è illegale (ha parti di mese e giorno senza senso) e diventa'0000-00-00'
. -
Come numero in
YYYYMMDD
oAAMMGG
formato, a condizione che il numero abbia senso come data. Ad esempio,19830905
e830905
vengono interpretati come'1983-09-05'
.
Pertanto, la stringa '08/25/2012'
non è una data letterale MySQL valida. Hai quattro opzioni (in un vago ordine di preferenza, senza ulteriori informazioni sulle tue esigenze):
-
Configura Datepicker per fornire le date in un formato supportato utilizzando un
altField
insieme al suoaltFormat
opzione :<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
Oppure, se sei felice che gli utenti vedano la data in
AAAA-MM-GG
format, imposta semplicemente ildateFormat
opzione invece:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
Usa
STR_TO_DATE( )
funzione per convertire la stringa:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
-
Converti la stringa ricevuta da jQuery in qualcosa che PHP interpreta come una data, ad esempio un
DataOra
oggetto:$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
e poi:
-
ottenere una stringa formattata adatta:
$date = $dt->format('Y-m-d');
-
ottenere il timestamp UNIX:
$timestamp = $dt->getTimestamp();
che viene quindi passato direttamente a
DA_UNIXTIME()
funzione:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Manipola manualmente la stringa in un valore letterale valido:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Avviso
-
Il tuo codice è vulnerabile a SQL injection. Tu davvero dovrebbe utilizzare dichiarazioni preparate , in cui si passano le variabili come parametri che non vengono valutati per SQL. Se non sai di cosa sto parlando o come risolverlo, leggi la storia di Tabelle Bobby .
-
Inoltre, come affermato in l'introduzione al capitolo del manuale PHP su
mysql_*
funzioni:Questa estensione è deprecata a partire da PHP 5.5.0 e non è consigliata per la scrittura di nuovo codice poiché verrà rimossa in futuro. Invece, il mysqli o PDO_MySQL dovrebbe essere utilizzata l'estensione. Vedi anche la Panoramica API MySQL per ulteriore assistenza nella scelta di un'API MySQL.
-
Sembra che tu stia utilizzando un
DATETIME
oTIMESTAMP
colonna per contenere un valore di data; Ti consiglio di considerare l'utilizzo diDATE
di MySQL digita invece. Come spiegato in IlDATE
,DATETIME
eTIMESTAMP
Tipi :Il
DATA
type viene utilizzato per i valori con una parte data ma senza parte temporale. MySQL recupera e visualizza i valori DATE in'YYYY-MM-DD'
formato. L'intervallo supportato è'1000-01-01'
a'9999-12-31'
.Il
DATETIME
type viene utilizzato per i valori che contengono parti di data e ora. MySQL recupera e visualizzaDATETIME
valori in'AAAA-MM-GG HH:MM:SS'
formato. L'intervallo supportato è'1000-01-01 00:00:00'
a'9999-12-31 23:59:59'
.Il
TIMESTAMP
il tipo di dati viene utilizzato per i valori che contengono parti di data e ora.TIMESTAMP
ha un intervallo di'1970-01-01 00:00:01'
UTC a'2038-01-19 03:14:07'
UTC.