Calcular diferencia entre dos fechas y horas en MySQL

157

Estoy almacenando el último tiempo de inicio de sesión en MySQL en datetime-tipo archivado. Cuando los usuarios inician sesión, quiero obtener la diferencia entre la última hora de inicio de sesión y la hora actual (que uso NOW()).

¿Cómo puedo calcularlo?

Devesh Agrawal
fuente

Respuestas:

296

USE la TIMESTAMPDIFFfunción MySQL. Por ejemplo, puedes usar:

SELECT TIMESTAMPDIFF(SECOND, '2012-06-06 13:13:55', '2012-06-06 15:20:18')

En su caso, el tercer parámetro de TIMSTAMPDIFFfunción sería el tiempo de inicio de sesión actual ( NOW()). El segundo parámetro sería el último tiempo de inicio de sesión, que ya está en la base de datos.

FSP
fuente
¿Eso es para actualizar el último inicio de sesión correcto? lo que quiero es como en stackoverflow tu pregunta publicada hace 2 segundos, hace 30 años, hace 2 minutos ... etc. Quiero un tipo similar de funcionalidad. Por ejemplo, hay una tabla que dice SOLICITUDES (id, mensaje, marca de tiempo). la marca de tiempo mientras se almacena será AHORA (). mientras ejecuto una consulta, seleccione * de las solicitudes, en lugar de mostrar ese valor, debería mostrar la identificación, el mensaje y cuánto tiempo se envió la solicitud de devolución.
Devesh Agrawal
1
Mientras estoy ejecutando la consulta SELECT TIMESTAMPDIFF (SECOND, NOW (), 'seleccione lastLoginTime de las solicitudes donde id =' 2 ''). Su retorno es NULL. ¿Alguna idea de por qué?
Devesh Agrawal
¿Cuál es la salida de select lastLoginTime de las solicitudes donde id = '2'?
FSP
SELECT TIMESTAMPDIFF (SEGUNDO, AHORA (), '2012-06-06 08:07:36'); ¡Prueba esto!
FSP
Sí, eso está funcionando, pero necesito obtener el segundo parámetro de la tabla. Cómo lograr eso. De hecho, quiero evitar la consulta anidada. ¿Alguna idea?
Devesh Agrawal
3

mis dos centavos sobre la lógica:

la sintaxis es "fecha anterior": "nueva fecha", entonces:

SELECT TIMESTAMPDIFF(SECOND, '2018-11-15 15:00:00', '2018-11-15 15:00:30')

da 30,

SELECT TIMESTAMPDIFF(SECOND, '2018-11-15 15:00:55', '2018-11-15 15:00:15')

da: -40

ingconti
fuente
2

Si las fechas de inicio y finalización son en días diferentes, use TIMEDIFF.

SELECT TIMEDIFF(datetime1,datetime2)

if datetime1> datetime2 entonces

SELECT TIMEDIFF("2019-02-20 23:46:00","2019-02-19 23:45:00")

da: 24:01:00

y datetime1 <datetime2

SELECT TIMEDIFF("2019-02-19 23:45:00","2019-02-20 23:46:00")

da: -24: 01: 00

Adi
fuente
Tenga en cuenta que solo puede hacer frente a fechas de hasta 839 horas de diferencia
Caius Jard