Jak je uvedeno v Literály o datu a čase :
MySQL rozpozná
DATE
hodnoty v těchto formátech:
Jako řetězec v
'YYYY-MM-DD'
nebo'RR-MM-DD'
formát. Je povolena „uvolněná“ syntaxe:Jako oddělovač mezi částmi data lze použít jakýkoli interpunkční znak. Například'2012-12-31'
,'2012/12/31'
,'2012^12^31'
a'[email protected] @31'
jsou ekvivalentní.Jako řetězec bez oddělovačů v
'RRRRMMDD'
nebo'RRMMDD'
formátu za předpokladu, že řetězec dává smysl jako datum. Například'20070523'
a'070523'
jsou interpretovány jako'2007-05-23'
, ale'071332'
je nezákonné (má nesmyslné části měsíce a dne) a stává se'0000-00-00'
.Jako číslo buď v
RRRRMMDD
neboRRMMDD
formátu za předpokladu, že číslo dává smysl jako datum. Například19830905
a830905
jsou interpretovány jako'1983-09-05'
.
Tedy řetězec '08/25/2012'
není platným datem MySQL. Máte čtyři možnosti (v nějakém nejasném pořadí preferencí, bez dalších informací o vašich požadavcích):
-
Nakonfigurujte Datepicker tak, aby poskytoval data v podporovaném formátu pomocí
altField
spolu s jehoaltFormat
možnost :<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
Nebo pokud jste rádi, že uživatelé vidí datum v
RRRR-MM-DD
formát, jednoduše nastavtedateFormat
možnost místo toho:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
Použijte MySQL
STR_TO_DATE( )
funkce pro převod řetězce:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
-
Převeďte řetězec přijatý z jQuery na něco, co PHP chápe jako datum, jako je
Datum a čas
objekt:$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
a pak buď:
-
získat vhodný formátovaný řetězec:
$date = $dt->format('Y-m-d');
-
získat časové razítko UNIX:
$timestamp = $dt->getTimestamp();
který je poté předán přímo do
FROM_UNIXTIME()
funkce:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Ručně upravte řetězec na platný literál:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Upozornění
-
Váš kód je zranitelný vůči vložení SQL. Vy opravdu by měl používat připravené výpisy , do kterého předáváte své proměnné jako parametry, které se nevyhodnocují pro SQL. Pokud nevíte, o čem mluvím, nebo jak to napravit, přečtěte si příběh Tabulky Bobby .
-
Také, jak je uvedeno v úvodu do kapitoly PHP manuálu na
mysql_*
funkce:Toto rozšíření je od PHP 5.5.0 zastaralé a nedoporučuje se pro psaní nového kódu, protože bude v budoucnu odstraněno. Místo toho buď mysqli nebo PDO_MySQL je třeba použít rozšíření. Viz také Přehled rozhraní MySQL API pro další pomoc při výběru MySQL API.
-
Zdá se, že používáte buď
DATETIME
neboTIMESTAMP
sloupec pro uložení hodnoty data; Doporučuji zvážit použitíDATE
MySQL zadejte místo toho. Jak je vysvětleno vDATE
,DATETIME
aTIMESTAMP
Typy :DATE
typ se používá pro hodnoty s částí data, ale bez části času. MySQL načte a zobrazí hodnoty DATE v'RRRR-MM-DD'
formát. Podporovaný rozsah je'1000-01-01'
na'9999-12-31'
.DATETIME
typ se používá pro hodnoty, které obsahují části data i času. MySQL načte a zobrazíDATETIME
hodnoty v'RRRR-MM-DD HH:MM:SS'
formát. Podporovaný rozsah je'1000-01-01 00:00:00'
na'9999-12-31 23:59:59'
.TIMESTAMP
datový typ se používá pro hodnoty, které obsahují část data i času.TIMESTAMP
má rozsah'1970-01-01 00:00:01'
UTC do'2038-01-19 03:14:07'
UTC.