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'example@sqldat.com @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
YYYYMMDDoAAMMDDformato, siempre que el número tenga sentido como fecha. Por ejemplo,19830905y830905se 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
altFieldjunto con sualtFormatopció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-DDformato, simplemente configure eldateFormatopció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
FechaHoraobjeto:$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
DATETIMEoTIMESTAMPcolumna para contener un valor de fecha; Te recomiendo que consideres usarDATEde MySQL escriba en su lugar. Como se explica en TheDATE,FECHAHORAyTIMESTAMPTipos :La
FECHAEl 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
DATETIMEEl tipo se utiliza para valores que contienen partes de fecha y hora. MySQL recupera y muestraDATETIMEvalores 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
TIMESTAMPEl tipo de datos se utiliza para valores que contienen partes de fecha y hora.TIMESTAMPtiene un rango de'1970-01-01 00:00:01'UTC a'2038-01-19 03:14:07'UTC.