No estoy seguro de cómo especificar mi tipo de datos como fecha y hora o marca de tiempo, creo que los necesitaré a ambos, pero en los diferentes eventos. Mi sitio web vende productos y servicios en todo el mundo y también tengo un sistema de cuentas para que el usuario inicie sesión. Por favor aclare lo siguiente:
- Fecha y hora actual en que el cliente compra productos desde mi sitio web: ¿Fecha y hora?
- Fecha y hora de entrega según su ubicación y fecha / hora de compra, calculadas a partir de nuestro sistema: ¿Fecha y hora?
Última vez que iniciaron sesión en su cuenta: ¿Marca de tiempo?
- ¿Cuál es el código en php para almacenar la fecha de compra (fecha actual) y luego almacenar en la base de datos?
- Elabore cómo usar cada uno de ellos, ya que después de leer muchas explicaciones en Internet, todavía no lo entiendo.
Respuestas:
Marcas de tiempo de MySQL :
Se almacenan en UTC
Se convierten a UTC en el almacenamiento y se vuelven a convertir a su zona horaria en la recuperación. Si cambia la configuración de la zona horaria , los valores recuperados también cambian.
Se puede inicializar y actualizar automáticamente
Puede establecer su valor predeterminado y / o el valor de actualización automática en
CURRENT_TIMESTAMP
Tener un rango de
1970-01-01 00:00:01 UTC
a2038-01-19 03:14:07 UTC
Mientras que MySQL datetime :
Lo que almacenas es lo que obtienes ™.
Tener un rango de
1000-01-01 00:00:00
a9999-12-31 23:59:59
Los valores fuera del rango pueden funcionar, pero solo los valores dentro del rango están garantizados para funcionar.
Puede almacenar fechas donde día o mes es cero.
¡Esta es la forma MySQL de almacenar cumpleaños! No puede hacer eso con a
TIMESTAMP
, con la única excepción de que es el valor cero de0000-00-00
.Puede almacenar fechas no válidas, si las necesita, en modo ALLOW_INVALID_DATES .
Puede establecer el valor predeterminado
NOW()
en algunos casos, pero la forma preferible y más natural de inicializar y actualizar automáticamente las fechas esTIMESTAMP
.Y, por supuesto, también hay
DATE
yTIME
, que funcionan igualDATETIME
, pero, por supuesto,DATE
no le importa el tiempoTIME
ni la fecha. Los cuatro tipos de datos funcionan perfectamente con la amplia gama de funciones de fecha y hora , pero cuando mezcle tipos de datos, debe tener en cuenta los efectos de conversión .Ahora, a su pregunta: debe usar en
DATETIME
todas partes. No por razones técnicas, pero dado que aún no está claro cómo funciona MySQL,DATETIME
es la opción más simple. Esto significará que tendrá que calcular la marca de tiempo actual en PHP antes de almacenarlo, eso es tan fácil como:La función de fecha de PHP funciona como:
El
"Y-m-d H:i:s"
formato es el compatible con MySQL y al dejar el segundo parámetro vacío, sedate()
llamatime()
para obtener la marca de tiempo UNIX actual .El uso de a en
TIMESTAMP
lugar de aDATETIME
tiene el valor agregado de MySQL asumiendo la responsabilidad de decidir sobre la marca de tiempo actual, y puede omitir el campo cuando está insertando / actualizando. Pero como ya está enviando una consulta, y el código para obtener la marca de tiempo actual en PHP es mínimo, puede utilizarlo con seguridadDATETIME
para todo.En cuanto al código real para almacenar la marca de tiempo de PHP en la base de datos, debe mirar Objetos de datos de PHP , y si aún no está claro, pregunte por StackOverflow . Pero ya hay casi 1.5k preguntas relacionadas , asegúrese de revisarlas antes de preguntar. Solo una pista, las declaraciones preparadas es cómo lo hacen los niños geniales.
fuente
Date
, esa es una palabra reservada para elDATE
tipo de datos y pueden suceder cosas extrañas (dependiendo de la versión de MySQL), así que intente cambiar el nombre a algo comocreationdate
y vea qué sucede . Además, desde PHP debe tratar losTIMESTAMP
campos de la misma manera que losDATETIME
campos, en realidad no importa. Su formato es el mismo.Referencia tomada de este artículo:
Las principales diferencias:
TIMESTAMP se utiliza para realizar un seguimiento de los cambios en los registros y actualizar cada vez que se modifica el registro. DATETIME se usa para almacenar valores específicos y estáticos que no se ven afectados por ningún cambio en los registros.
TIMESTAMP también se ve afectado por diferentes ajustes relacionados con la ZONA HORA. DATETIME es constante.
TIMESTAMP convirtió internamente la zona horaria actual a UTC para el almacenamiento, y durante la recuperación se convirtió de nuevo a la zona horaria actual. DATETIME no puede hacer esto.
Rango admitido TIMESTAMP: '1970-01-01 00:00:01' UTC a '2038-01-19 03:14:07' UTC DATETIME rango admitido: '1000-01-01 00:00:00' a '9999 -12-31 23:59:59 ′
fuente
Bueno, veo esto de una manera muy simple. En su caso, usaría ambos
datetime
ytimestamp
. Con el uso de ambos, no tendrá ningún problema adicional con el almacenamiento de datos o algo así. Un campo adicional (columna) en su tabla tampoco es un gran problema.Entonces, en mi punto de vista y experiencias hasta ahora, usualmente uso ambos. Cuando desee mostrar una fecha a su visitante o hacerla comprensible para los visitantes, muestre una fecha en formato de fecha y hora.
El formato de fecha y hora puede ser una molestia cuando desea calcular algo (diferencia entre 2 fechas, obtener la fecha de ayer de la fecha actual, obtener hace 1 semana desde la fecha actual, obtener la fecha de mañana o algo así). No es realmente difícil, pero generalmente lo hará necesita convertirlos
timestamp
y luego hacer las cosas. Y sí, fecha y hora actual, por ejemplo, con la que obtienes:$current = date("Y-m-d");
o$current = date("Y-m-d H:i:s");
si también quieres horas, minutos y segundos.La marca de tiempo es solo un número de 11 dígitos que realmente no "significa" nada. Cuando lo mire, no sabrá qué fecha representa. Por lo tanto, no es realmente fácil de usar y no puede usarlo para hacer eco y mostrarlo a sus visitantes, por ejemplo. Deberá "transformarlo" en algo legible. Pero también le ofrece la posibilidad de convertirlo fácilmente y calcular diferentes fechas. Por ejemplo, si desea obtener la marca de tiempo de mañana a la misma hora, simplemente agregue el número de segundos a la fecha actual y tenga la marca de tiempo de mañana. Ejemplo:
$tomorrow = time()+24*3600;
También puede obtener fácilmente una diferencia entre dos fechas en segundos o algo así.Por lo tanto, sugeriría usar fecha y hora. Incluso si usa, por ejemplo, PhpMyadmin y desea ver rápidamente algunos datos, será más fácil para usted cuando vea una fecha en formato de fecha y hora (ejemplo
2011-12-20 10:15:20
:) como lo será si solo mira el número de 11 dígitos. Así que usa ambos y luego llama y usa el que más te convenga.Si debe o desea elegir solo uno, sugeriría una marca de tiempo; de lo contrario, use ambos.
fuente
Timestamp is just a number 11 digit long which doesn't really "mean" anything
marcas de tiempo de MySQL se almacenan en el mismo formato que datetime. También necesita convertirlos a marcas de tiempo de php, para hacer los cálculos que describe, O simplemente use las muchas funciones de fecha / hora de MySQL y haga los cálculos en la base de datos. Tu respuesta realmente no tiene sentido.