Zoals vermeld in Datum- en tijdliteratuur :
MySQL herkent
DATE
waarden in deze formaten:
Als een string in een van beide
'YYYY-MM-DD'
of'YY-MM-DD'
formaat. Een "relaxte" syntaxis is toegestaan:elk leesteken kan worden gebruikt als scheidingsteken tussen datumdelen. Bijvoorbeeld'2012-12-31'
,'2012/12/31'
,'2012^12^31'
, en'[email protected]@31'
gelijkwaardig zijn.Als een tekenreeks zonder scheidingstekens in
'YYYYMMDD'
of'YYMMDD'
formaat, op voorwaarde dat de string zinvol is als een datum. Bijvoorbeeld'20070523'
en'070523'
worden geïnterpreteerd als'2007-05-23'
, maar'071332'
is illegaal (het heeft onzinnige maand- en dagdelen) en wordt'0000-00-00'
.Als een getal in
YYYYMMDD
ofYYMMDD
formaat, op voorwaarde dat het nummer zinvol is als een datum. Bijvoorbeeld19830905
en830905
worden geïnterpreteerd als'1983-09-05'
.
Daarom is de string '08/25/2012'
is geen geldige MySQL-datum letterlijk. Je hebt vier opties (in een vage volgorde van voorkeur, zonder verdere informatie over je wensen):
-
Configureer Datepicker om datums in een ondersteund formaat weer te geven met behulp van een
altField
samen met zijnaltFormat
optie :<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
Of, als u het prettig vindt dat gebruikers de datum zien in
YYYY-MM-DD
formaat, stel gewoon dedateFormat
in optie in plaats daarvan:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
Gebruik MySQL's
STR_TO_DATE()
functie om de string te converteren:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
-
Converteer de tekenreeks die is ontvangen van jQuery naar iets dat PHP begrijpt als een datum, zoals een
DateTime
voorwerp:$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
en dan ofwel:
-
verkrijg een geschikte opgemaakte string:
$date = $dt->format('Y-m-d');
-
verkrijg de UNIX-tijdstempel:
$timestamp = $dt->getTimestamp();
die vervolgens rechtstreeks wordt doorgegeven aan MySQL's
FROM_UNIXTIME()
functie:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Manipuleer de string handmatig in een geldige letterlijke:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Waarschuwing
-
Uw code is kwetsbaar voor SQL-injectie. Jij echt zou voorbereide verklaringen moeten gebruiken , waarin u uw variabelen doorgeeft als parameters die niet worden geëvalueerd voor SQL. Als je niet weet waar ik het over heb, of hoe je het kunt oplossen, lees dan het verhaal van Bobbytafels .
-
Ook, zoals vermeld in de inleiding naar het hoofdstuk over de PHP-handleiding op de
mysql_*
functies:Deze extensie is verouderd vanaf PHP 5.5.0 en wordt niet aanbevolen voor het schrijven van nieuwe code, aangezien deze in de toekomst zal worden verwijderd. In plaats daarvan, ofwel de mysqli of PDO_MySQL extensie moet worden gebruikt. Zie ook het MySQL API-overzicht voor meer hulp bij het kiezen van een MySQL API.
-
U lijkt een
DATETIME
. te gebruiken ofTIMESTAMP
kolom voor het bevatten van een datumwaarde; Ik raad je aan om MySQL'sDATE
. te gebruiken typ in plaats daarvan. Zoals uitgelegd in DeDATE
,DATETIME
, enTIMESTAMP
Soorten :De
DATE
type wordt gebruikt voor waarden met een datumgedeelte maar geen tijdgedeelte. MySQL haalt DATE-waarden op en geeft ze weer in'YYYY-MM-DD'
formaat. Het ondersteunde bereik is'1000-01-01'
naar'9999-12-31'
.De
DATETIME
type wordt gebruikt voor waarden die zowel datum- als tijddelen bevatten. MySQL haaltDATETIME
op en geeft het weer waarden in'YYYY-MM-DD HH:MM:SS'
formaat. Het ondersteunde bereik is'1000-01-01 00:00:00'
naar'9999-12-31 23:59:59'
.De
TIMESTAMP
gegevenstype wordt gebruikt voor waarden die zowel datum- als tijddelen bevatten.TIMESTAMP
heeft een bereik van'1970-01-01 00:00:01'
UTC naar'2038-01-19 03:14:07'
GMT.