Conforme declarado em Literais de data e hora :
MySQL reconheceDATEvalores nestes formatos:
Como uma string em'AAAA-MM-DD'ou'AA-MM-DD'formato. Uma sintaxe “relaxada” é permitida:Qualquer caractere de pontuação pode ser usado como delimitador entre as partes da data. Por exemplo,'2012-12-31','2012/12/31','2012^12^31'e'example@sqldat.com @31'são equivalentes.
Como uma string sem delimitadores em'YYYYMMDD'ou'AAMMDD'formato, desde que a string faça sentido como uma data. Por exemplo,'20070523'e'070523'são interpretados como'2007-05-23', mas'071332'é ilegal (tem partes de mês e dia sem sentido) e se torna'0000-00-00'.
Como um número emAAAAMMDDouAAMMDDformato, desde que o número faça sentido como uma data. Por exemplo,19830905e830905são interpretados como'1983-09-05'.
Portanto, a string
'08/25/2012' não é um literal de data MySQL válido. Você tem quatro opções (em alguma ordem vaga de preferência, sem mais informações sobre suas necessidades):-
Configure o Datepicker para fornecer datas em um formato compatível usando umaltFieldjuntamente com seualtFormatopção :
<input type="hidden" id="actualDate" name="actualDate"/>$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
Ou, se você quiser que os usuários vejam a data emAAAA-MM-DDformato, basta definir odateFormatopção em vez de:
$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" }); -
Use oSTR_TO_DATE( do MySQL) )função para converter a string:
INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y')) -
Converta a string recebida do jQuery em algo que o PHP entenda como uma data, como umDataHoraobjeto:
$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
e então:
-
obter uma string formatada adequada:
$date = $dt->format('Y-m-d'); -
obter o carimbo de data/hora do UNIX:
$timestamp = $dt->getTimestamp();
que é então passado diretamente para oFROM_UNIXTIME()função:
INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Manipule manualmente a string em um literal válido:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Aviso
-
Seu código é vulnerável à injeção de SQL. Você realmente deve usar declarações preparadas , para o qual você passa suas variáveis como parâmetros que não são avaliados para SQL. Se você não sabe do que estou falando ou como consertar, leia a história de Mesas Bobby .
-
Além disso, conforme declarado na a introdução para o capítulo do manual do PHP nomysql_*funções:
Esta extensão está obsoleta a partir do PHP 5.5.0 e não é recomendada para escrever novo código, pois será removida no futuro. Em vez disso, o mysqli ou PDO_MySQL extensão deve ser usada. Veja também a Visão geral da API MySQL para obter mais ajuda ao escolher uma API MySQL.
-
Você parece estar usando umDATETIMEouTIMESTAMPcoluna para guardar um valor de data; Eu recomendo que você considere usar oDATEdo MySQL digite em vez disso. Conforme explicado em ADATA,DATETIMEeTIMESTAMPTipos :
ADATAtype é usado para valores com parte de data, mas sem parte de hora. MySQL recupera e exibe valores DATE em'YYYY-MM-DD'formato. O intervalo suportado é'1000-01-01'para'9999-12-31'.
ODATETIMEtype é usado para valores que contêm partes de data e hora. MySQL recupera e exibeDATETIMEvalores em'AAAA-MM-DD HH:MM:SS'formato. O intervalo suportado é'1000-01-01 00:00:00'para'9999-12-31 23:59:59'.
OTIMESTAMPtipo de dados é usado para valores que contêm partes de data e hora.TIMESTAMPtem um intervalo de'1970-01-01 00:00:01'UTC para'2038-01-19 03:14:07'UTC.