Como se indica en Literales de fecha y hora :
MySQL reconoce DATE
valores en estos formatos:
-
Como una cadena en
'YYYY-MM-DD'
o'AA-MM-DD'
formato. Se permite una sintaxis "relajada":se puede usar cualquier carácter de puntuación como delimitador entre las partes de la fecha. Por ejemplo,'2012-12-31'
,'2012/12/31'
,'2012^12^31'
y'[email protected] @31'
son equivalentes. -
Como una cadena sin delimitadores en
'YYYYMMDD'
o'AAMMDD'
formato, siempre que la cadena tenga sentido como una fecha. Por ejemplo,'20070523'
y'070523'
se interpretan como'2007-05-23'
, pero'071332'
es ilegal (tiene partes de mes y día sin sentido) y se convierte en'0000-00-00'
. -
Como un número en
YYYYMMDD
oAAMMDD
formato, siempre que el número tenga sentido como fecha. Por ejemplo,19830905
y830905
se interpretan como'1983-09-05'
.
Por lo tanto, la cadena '08/25/2012'
no es un literal de fecha MySQL válido. Tiene cuatro opciones (en un vago orden de preferencia, sin más información sobre sus requisitos):
-
Configure Datepicker para proporcionar fechas en un formato compatible usando un
altField
junto con sualtFormat
opción :<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
O bien, si está de acuerdo con que los usuarios vean la fecha en
YYYY-MM-DD
formato, simplemente configure eldateFormat
opción en cambio:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
Use MySQL
STR_TO_DATE( )
función para convertir la cadena:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
-
Convierta la cadena recibida de jQuery en algo que PHP entienda como una fecha, como
FechaHora
objeto:$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
y luego:
-
obtener una cadena con formato adecuado:
$date = $dt->format('Y-m-d');
-
obtener la marca de tiempo UNIX:
$timestamp = $dt->getTimestamp();
que luego se pasa directamente al
FROM_UNIXTIME()
función:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Manipule manualmente la cadena en un literal válido:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Advertencia
-
Tu código es vulnerable a la inyección SQL. Tú de verdad debería usar declaraciones preparadas , en el que pasa sus variables como parámetros que no se evalúan para SQL. Si no sabe de qué estoy hablando o cómo solucionarlo, lea la historia de Bobby Tables .
-
Además, como se indica en la introducción al capítulo del manual de PHP sobre
mysql_*
funciones:Esta extensión está obsoleta a partir de PHP 5.5.0 y no se recomienda para escribir código nuevo, ya que se eliminará en el futuro. En su lugar, el mysqli o PDO_MySQL se debe usar la extensión. Consulte también la Descripción general de la API de MySQL para obtener más ayuda al elegir una API de MySQL.
-
Parece que estás usando un
DATETIME
oTIMESTAMP
columna para contener un valor de fecha; Te recomiendo que consideres usarDATE
de MySQL escriba en su lugar. Como se explica en TheDATE
,FECHAHORA
yTIMESTAMP
Tipos :La
FECHA
El tipo se utiliza para valores con una parte de fecha pero sin parte de hora. MySQL recupera y muestra los valores de FECHA en'YYYY-MM-DD'
formato. El rango admitido es'1000-01-01'
a'9999-12-31'
.El
DATETIME
El tipo se utiliza para valores que contienen partes de fecha y hora. MySQL recupera y muestraDATETIME
valores en'YYYY-MM-DD HH:MM:SS'
formato. El rango admitido es'1000-01-01 00:00:00'
a'9999-12-31 23:59:59'
.El
TIMESTAMP
El tipo de datos se utiliza para valores que contienen partes de fecha y hora.TIMESTAMP
tiene un rango de'1970-01-01 00:00:01'
UTC a'2038-01-19 03:14:07'
UTC.