Conforme declarado em Literais de data e hora :
MySQL reconheceDATE
valores 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'[email protected] @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 emAAAAMMDD
ouAAMMDD
formato, desde que o número faça sentido como uma data. Por exemplo,19830905
e830905
sã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 umaltField
juntamente com seualtFormat
opçã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-DD
formato, basta definir odateFormat
opçã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 umDataHora
objeto:
$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 umDATETIME
ouTIMESTAMP
coluna para guardar um valor de data; Eu recomendo que você considere usar oDATE
do MySQL digite em vez disso. Conforme explicado em ADATA
,DATETIME
eTIMESTAMP
Tipos :
ADATA
type é 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'
.
ODATETIME
type é usado para valores que contêm partes de data e hora. MySQL recupera e exibeDATETIME
valores em'AAAA-MM-DD HH:MM:SS'
formato. O intervalo suportado é'1000-01-01 00:00:00'
para'9999-12-31 23:59:59'
.
OTIMESTAMP
tipo de dados é usado para valores que contêm partes de data e hora.TIMESTAMP
tem um intervalo de'1970-01-01 00:00:01'
UTC para'2038-01-19 03:14:07'
UTC.