Wie in Datums- und Zeitliterale angegeben :
MySQL erkennt DATE
Werte in diesen Formaten:
-
Als Zeichenfolge entweder in
'YYYY-MM-DD'
oder'JJ-MM-TT'
Format. Eine „entspannte“ Syntax ist zulässig:Als Trennzeichen zwischen Datumsteilen darf ein beliebiges Satzzeichen verwendet werden. Beispiel:'2012-12-31'
,'2012/12/31'
,'2012^12^31'
, und'[email protected] @31'
sind gleichwertig. -
Als Zeichenfolge ohne Trennzeichen in beiden
'YYYYMMDD'
oder'JJMMTT'
Format, sofern der String als Datum sinnvoll ist. Beispiel:'20070523'
und'070523'
werden als'2007-05-23'
interpretiert , aber'071332'
ist illegal (es hat unsinnige Monats- und Tagesteile) und wird zu'0000-00-00'
. -
Als Zahl entweder in
YYYYMMDD
oderJJMMTT
Format, sofern die Zahl als Datum sinnvoll ist. Beispiel:19830905
und830905
werden als'1983-09-05'
interpretiert .
Daher die Zeichenfolge '08/25/2012'
ist kein gültiges MySQL-Datumsliteral. Sie haben vier Möglichkeiten (in einer vagen Präferenzreihenfolge, ohne weitere Informationen zu Ihren Anforderungen):
-
Konfigurieren Sie Datepicker so, dass Datumsangaben in einem unterstützten Format mithilfe eines
altField
bereitgestellt werden zusammen mit seinemaltFormat
Möglichkeit :<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
Oder wenn Sie möchten, dass Benutzer das Datum im Format
JJJJ-MM-TT
sehen Format, legen Sie einfach dasdateFormat
fest Möglichkeit stattdessen:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
Verwenden Sie MySQLs
STR_TO_DATE( )
Funktion zum Konvertieren des Strings:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
-
Konvertieren Sie den von jQuery erhaltenen String in etwas, das PHP als Datum versteht, wie etwa
DatumUhrzeit
Objekt:$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
und dann entweder:
-
Erhalten Sie eine geeignet formatierte Zeichenfolge:
$date = $dt->format('Y-m-d');
-
Rufen Sie den UNIX-Zeitstempel ab:
$timestamp = $dt->getTimestamp();
die dann direkt an MySQLs
FROM_UNIXTIME()
Funktion:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Manipulieren Sie die Zeichenfolge manuell in ein gültiges Literal:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Warnung
-
Ihr Code ist anfällig für SQL-Injection. Sie wirklich sollten vorbereitete Anweisungen verwenden , an die Sie Ihre Variablen als Parameter übergeben, die für SQL nicht ausgewertet werden. Wenn Sie nicht wissen, wovon ich spreche oder wie Sie es beheben können, lesen Sie die Geschichte von Bobby Tables .
-
Außerdem, wie in der Einführung angegeben zum Kapitel des PHP-Handbuchs zu
mysql_*
Funktionen:Diese Erweiterung ist ab PHP 5.5.0 veraltet und wird nicht zum Schreiben von neuem Code empfohlen, da sie in Zukunft entfernt wird. Stattdessen kann entweder der mysqli oder PDO_MySQL Erweiterung verwendet werden soll. Siehe auch die MySQL-API-Übersicht für weitere Hilfe bei der Auswahl einer MySQL-API.
-
Sie scheinen entweder einen
DATETIME
zu verwenden oderTIMESTAMP
Spalte zum Halten eines Datumswertes; Ich empfehle Ihnen, MySQLsDATE
zu verwenden geben Sie stattdessen ein. Wie in demDATE
erklärt ,DATETIME
, undTIMESTAMP
Typen :Das
DATUM
Typ wird für Werte mit einem Datumsteil, aber ohne Zeitteil verwendet. MySQL ruft DATE-Werte ab und zeigt sie in'YYYY-MM-DD'
an Format. Der unterstützte Bereich ist'1000-01-01'
bis'9999-12-31'
.Die
DATETIME
Typ wird für Werte verwendet, die sowohl Datums- als auch Uhrzeitteile enthalten. MySQL ruftDATETIME
ab und zeigt es an Werte in'YYYY-MM-DD HH:MM:SS'
Format. Der unterstützte Bereich ist'1000-01-01 00:00:00'
bis'9999-12-31 23:59:59'
.Der
TIMESTAMP
Der Datentyp wird für Werte verwendet, die sowohl Datums- als auch Uhrzeitteile enthalten.ZEITSTEMPEL
hat einen Bereich von'1970-01-01 00:00:01'
UTC bis'2038-01-19 03:14:07'
UTC.