dado que no está proporcionando un parámetro hasta la fecha, ¿realmente desea registrar la hora actual?
Mark Elliot
Respuestas:
680
El problema es que está utilizando 'M'y 'D', que son representaciones textuales, MySQL espera una representación numérica del formato2010-02-06 19:30:13
Prueba: date("Y-m-d H:i:s")que usa los equivalentes numéricos.
editar: cambiado Ga H, aunque puede no tener impacto, probablemente desee utilizar el formato de 24 horas con ceros a la izquierda.
Este tiene que ser uno de los formatos de fecha y hora más comunes que alguien pueda necesitar. debe ser un php global integrado o parte de la función de fecha en sí (por ejemplo, 'c', 'r')
billynoah
33
Por qué este no es el caso, no lo sé. Tengo que referirme al desbordamiento de pila cada. soltero. marcha. hora.
Mazateca el
11
Es más rápido venir aquí, que buscar en mi código un uso como este.
MRodrigues
64
Acaba de ocurrir una regla mnemotécnica lindo para recordar el formato: " Y nuestra m y d no comió Su ". funciona en muchos niveles :)
IzzEps
2
Debería haber una abreviatura de php para esto, ya que hay para ISO 8601 y RFC 2822
<?php $mysqltime = date ("Y-m-d H:i:s", $phptime);?>
Tuviste la 'Y' correcta, es un año completo, pero 'M' es un mes de tres caracteres, mientras que 'm' es un mes de dos dígitos. Mismo problema con 'D' en lugar de 'd'. 'G' es una hora de 1 o 2 dígitos, donde 'H' siempre tiene un 0 inicial cuando es necesario.
Gracias @Pekka - Recuerdo cuando tú y yo tuvimos más o menos el mismo representante - has estado bastante activo.
Tim Lytle
1
sí, estoy trabajando mucho en este momento, y SO es mi pasatiempo favorito en el medio :) que cambiará nuevamente.
Pekka
41
Aquí hay una solución alternativa: si tiene la fecha en PHP como marca de tiempo, omita el manejo con PHP y deje que la base de datos se encargue de transformarla utilizando la FROM_UNIXTIMEfunción.
@trejder, ¿Quién te dijo que hacerlo en mysql es más rápido que hacerlo en php? Hacerlo en PHP es mejor porque la base de datos generalmente es el cuello de botella y desea entrar y salir lo antes posible .
Pacerier
1
@Pacerier, la base de datos es el cuello de botella si tiene una base de datos mal construida, o está ejecutando demasiadas consultas pequeñas en lugar de una consulta única efectiva más sólida, o en muchos casos si confía en un ORM para administrar la base de datos. El SQL sólido con una base de datos relacional bien indexada no es lento.
mopsyd
2
@mopsyd, el DB es el cuello de botella porque escalarlo horizontalmente requiere complejidad. Compare eso con los servidores web que se pueden duplicar en todo el mundo sin ningún cambio de código.
Pacerier
1
Si la consulta falla, se registra en algún lugar y tiene que depurarla, entonces la marca de tiempo es mucho más difícil de leer que la cadena de fecha con formato descrita por @ tim-lytle.
humbads
27
Utilizo el siguiente código PHP para crear una variable que inserto en una columna DATETIME de MySQL.
$datetime = date_create()->format('Y-m-d H:i:s');
Esto mantendrá la fecha y hora actuales del servidor.
$date_old ='23-5-2016 23:15:23';//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));//Format should be like 'Y-m-d H:i:s'`enter code here`
Aunque este código puede responder la pregunta, proporcionar un contexto adicional sobre por qué y / o cómo responde la pregunta mejoraría significativamente su valor a largo plazo. Por favor, editar su respuesta a añadir un poco de explicación, y para arreglar sus problemas de formato.
Toby Speight
9
Formatee la marca de tiempo en la columna DATETIME de MySQL:
He votado tu respuesta porque funcionó después de editar la primera línea; function getDateForDatabase(string $date) : string {a function getDateForDatabase($date) {¿Por qué las declaraciones de tipo emiten un error que no sé lo suficiente de PHP que contar.
Chris Pink
"El argumento 1 pasado a getDateForDatabase () debe ser una instancia de cadena, cadena dada," - mi entrada fue una cadena,
Chris Pink
7
No es necesario que no use el método date () de PHP si no usa una marca de tiempo. Si datepostedes una columna de fecha y hora, puede insertar la fecha actual de esta manera:
$db->query("INSERT INTO table (dateposted) VALUES (now())");
Gracias por compartir este enfoque. Es el método más fácil que he visto hasta ahora.
Shondeslitch
2
Esto me ha estado volviendo loco buscando una respuesta simple. Finalmente hice esta función que parece capturar todas las entradas y dar una buena cadena SQL que es correcta o al menos válida y comprobable. Si es 1999-12-31, probablemente esté mal pero no arrojará un error grave en MySQL.
functionMakeSQLDate($date){if(is_null($date)){//use 1999-12-31 as a valid date or as an alertreturn date('Y-m-d', strtotime('1999-12-31'));}if(($t = strtotime($date))===false){//use 1999-12-31 as a valid date or as an alertreturn date('Y-m-d', strtotime('1999-12-31'));}else{return date('Y-m-d H:i:s', strtotime($date));}}
Un pequeño anexo a la respuesta aceptada: si la base de datos datetimese almacena como UTC (lo que siempre hago), debe usar en gmdate("Y-m-d H:i:s")lugar de date("Y-m-d H:i:s").
O, si prefiere dejar que MySQL se encargue de todo, como sugieren algunas respuestas, insertaría MySQL UTC_TIMESTAMPcon el mismo resultado.
Nota: entendí la pregunta referente a la hora actual.
Respuestas:
El problema es que está utilizando
'M'
y'D'
, que son representaciones textuales, MySQL espera una representación numérica del formato2010-02-06 19:30:13
Prueba:
date("Y-m-d H:i:s")
que usa los equivalentes numéricos.editar: cambiado
G
aH
, aunque puede no tener impacto, probablemente desee utilizar el formato de 24 horas con ceros a la izquierda.fuente
De los comentarios de la
date()
página del manual de php :Tuviste la 'Y' correcta, es un año completo, pero 'M' es un mes de tres caracteres, mientras que 'm' es un mes de dos dígitos. Mismo problema con 'D' en lugar de 'd'. 'G' es una hora de 1 o 2 dígitos, donde 'H' siempre tiene un 0 inicial cuando es necesario.
fuente
Aquí hay una solución alternativa: si tiene la fecha en PHP como marca de tiempo, omita el manejo con PHP y deje que la base de datos se encargue de transformarla utilizando la
FROM_UNIXTIME
función.fuente
Utilizo el siguiente código PHP para crear una variable que inserto en una columna DATETIME de MySQL.
Esto mantendrá la fecha y hora actuales del servidor.
fuente
fuente
Formatee la marca de tiempo en la columna DATETIME de MySQL:
fuente
Formatear fecha y hora MySQL con PHP
fuente
Yo uso esta función (PHP 7)
Versiones anteriores de PHP (PHP <7)
fuente
function getDateForDatabase(string $date) : string {
afunction getDateForDatabase($date) {
¿Por qué las declaraciones de tipo emiten un error que no sé lo suficiente de PHP que contar.No es necesario que no use el método date () de PHP si no usa una marca de tiempo. Si
dateposted
es una columna de fecha y hora, puede insertar la fecha actual de esta manera:fuente
Esto me ha estado volviendo loco buscando una respuesta simple. Finalmente hice esta función que parece capturar todas las entradas y dar una buena cadena SQL que es correcta o al menos válida y comprobable. Si es 1999-12-31, probablemente esté mal pero no arrojará un error grave en MySQL.
fuente
Usando la
DateTime
clase en PHP7 +:fuente
Un pequeño anexo a la respuesta aceptada: si la base de datos
datetime
se almacena como UTC (lo que siempre hago), debe usar engmdate("Y-m-d H:i:s")
lugar dedate("Y-m-d H:i:s")
.O, si prefiere dejar que MySQL se encargue de todo, como sugieren algunas respuestas, insertaría MySQL
UTC_TIMESTAMP
con el mismo resultado.Nota: entendí la pregunta referente a la hora actual.
fuente
Esta es una forma más precisa de hacerlo. Coloca decimales detrás de los segundos dando más precisión.
Note el
.uP
.Más información: https://stackoverflow.com/a/6153162/8662476
fuente