2010-12-21 15 views
18

Necesito calcular el tiempo que un usuario pasa en el sitio. Es la diferencia entre el tiempo de cierre de sesión y el tiempo de inicio de sesión para darme algo así como "el señor X pasó 4 horas y 43 minutos en línea". Así que para almacenar las4 horas y 43 minutos lo declaró así: duration tiempo NOT NULLMySQL tiempo de duración de almacenamiento - tipo de datos?

¿Es esta una forma válida o una mejor manera de almacenar esto? Necesito almacenar en el DB porque tengo otros cálculos. Necesito usar esto para + otros casos de uso.

Respuesta

32

Almacenarlo como un número entero de segundos será la mejor manera de proceder.

  • El UPDATE habrá limpio y simple - es decir duration = duration + $increment
  • Como se señaló Tristram, hay limitations de utilizar el campo TIME - por ejemplo, "TIME los valores pueden variar desde '-838:59:59' hasta '838:59:59'"
  • El formato de visualización de días/horas/minutos/segundos no se codificará de forma fija.
  • La ejecución de otros cálculos casi seguramente será más clara cuando se trabaja con un número entero de "número de segundos".
+0

ok suena buena voluntad uso int, gracias. – Juds

+1

Definitivamente iría con 'TIME'. No puedo pensar en alguien que pase 34 días seguidos en línea. Si es así, estoy listo para que este extraño caso se encuentre con un error. Las instrucciones 'UPDATE' se pueden hacer fácilmente usando' ADDTIME() '. Con esto también puede agregar como 30 minutos y 23 segundos sin transferir eso en segundos. Nada está codificado, siempre puedes hacer 'TIME_TO_SEC()' - si realmente lo necesitas (lo que dudo). – Gerald

0

No utilizaría el tiempo ya que estaría limitado a 24 horas. Lo más fácil sería simplemente almacenar un número entero en minutos (o segundos dependiendo de la resolución que necesite).

+0

entero no dará el tiempo exacto como 4 horas, 45 minutos 32 segundos a menos que almacene en segundos? Esperaba formatear automáticamente la entrada directamente en la base de datos como x horas, x minutos. (tal vez agregue x segundos también) en lugar de almacenarlo como 474747474 segundos, que luego nuevamente requiere la conversión a una forma legible por humanos. – Juds

+0

@Juds Argumentaría que la conveniencia de tener un intervalo de tiempo formateado en el DB se ve superado por los muchos otros factores que @Tristram y @Riedsio han mencionado. ¿Por qué no dejar que el formato de intervalo sea una preocupación de la capa de presentación? :) –

+5

el tiempo no está limitado a 24 horas, ver arriba – Ashley

Cuestiones relacionadas