Som anges i Datum och tidbokstav :
MySQL känner igen
DATE
värden i dessa format:
Som en sträng i antingen
'ÅÅÅÅ-MM-DD'
eller'ÅÅ-MM-DD'
formatera. En "avslappnad" syntax är tillåten:Alla skiljetecken kan användas som avgränsare mellan datumdelar. Till exempel'2012-12-31'
,'2012/12/31'
,'2012^12^31'
och'[email protected] @31'
är likvärdiga.Som en sträng utan avgränsare i någon av
'ÅÅÅÅMMDD'
eller'ÅÅMMDD'
format, förutsatt att strängen är vettig som ett datum. Till exempel'20070523'
och'070523'
tolkas som'2007-05-23'
, men'071332'
är olagligt (den har orimliga månads- och dagdelar) och blir'0000-00-00'
.Som ett nummer i antingen
ÅÅÅÅMMDD
ellerÅÅMMDD
format, förutsatt att numret är vettigt som ett datum. Till exempel19830905
och830905
tolkas som'1983-09-05'
.
Därför är strängen '08/25/2012'
är inte en giltig MySQL-datumbokstav. Du har fyra alternativ (i någon vag prioritetsordning, utan ytterligare information om dina krav):
-
Konfigurera Datepicker för att tillhandahålla datum i ett format som stöds med ett
altField
tillsammans med dessaltFormat
alternativ :<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
Eller om du vill att användarna ska se datumet i
ÅÅÅÅ-MM-DD
format, ställ bara indateFormat
alternativ istället:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
Använd MySQL:s
STR_TO_DATE( )
funktion för att konvertera strängen:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
-
Konvertera strängen som tas emot från jQuery till något som PHP förstår som ett datum, till exempel en code>DatumTime objekt:
$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
och sedan antingen:
-
skaffa en lämplig formaterad sträng:
$date = $dt->format('Y-m-d');
-
få UNIX-tidsstämpeln:
$timestamp = $dt->getTimestamp();
som sedan skickas direkt till MySQL:s
FROM_UNIXTIME()
funktion:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Manipulera strängen manuellt till en giltig bokstavlig:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Varning
-
Din kod är sårbar för SQL-injektion. Du verkligen bör använda förberedda uttalanden , där du skickar dina variabler som parametrar som inte utvärderas för SQL. Om du inte vet vad jag pratar om, eller hur du fixar det, läs historien om Bobby Tables .
-
Dessutom, som anges i introduktionen till PHP-manualkapitlet om
mysql_*
funktioner:Detta tillägg är utfasat från och med PHP 5.5.0 och rekommenderas inte för att skriva ny kod eftersom det kommer att tas bort i framtiden. Istället, antingen mysqli eller PDO_MySQL förlängning ska användas. Se även MySQL API-översikt för ytterligare hjälp när du väljer ett MySQL API.
-
Du verkar använda antingen en
DATETIME
ellerTIMESTAMP
kolumn för att hålla ett datumvärde; Jag rekommenderar att du överväger att använda MySQL:sDATE
typ istället. Som förklarat iDATE
,DATETIME
ochTIMESTAMP
Typer :DATE
typ används för värden med en datumdel men ingen tidsdel. MySQL hämtar och visar DATUM-värden i'ÅÅÅÅ-MM-DD'
formatera. Området som stöds är'1000-01-01'
till'9999-12-31'
.DATETIME
typ används för värden som innehåller både datum- och tidsdelar. MySQL hämtar och visarDATETIME
värden i'ÅÅÅÅ-MM-DD TT:MM:SS'
formatera. Området som stöds är'1000-01-01 00:00:00'
till'9999-12-31 23:59:59'
.TIMESTAMP
datatyp används för värden som innehåller både datum- och tidsdelar.TIMESTAMP
har ett intervall på'1970-01-01 00:00:01'
UTC till'2038-01-19 03:14:07'
UTC.