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?


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.


¿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


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


Tenga en cuenta que solo puede hacer frente a fechas de hasta 839 horas de diferencia
Caius Jard
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.