Calcular a diferença entre duas datas no MySQL

157

Estou armazenando o último horário de login no MySQL em, datetime-type archive. Quando os usuários efetuam login, quero obter a diferença entre o último horário de login e o horário atual (que uso NOW()).

Como posso calcular?

Devesh Agrawal
fonte

Respostas:

296

USE a TIMESTAMPDIFFfunção MySQL. Por exemplo, você pode usar:

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

No seu caso, o terceiro parâmetro da TIMSTAMPDIFFfunção seria a hora atual de login ( NOW()). O segundo parâmetro seria o último horário de login, que já está no banco de dados.

FSP
fonte
Isso é para atualizar o último login certo ?? o que eu quero é como no stackoverflow sua pergunta postada 2s atrás, 30s atrás, 2 min atrás .. etc. Eu quero um tipo semelhante de funcionalidade. Por exemplo, há uma tabela como PEDIDOS (identificação, mensagem, registro de data e hora). o carimbo de data e hora durante o armazenamento será NOW (). enquanto executo uma consulta, selecione * de solicitações, em vez de exibir esse valor, ele deve exibir id, mensagem e quanto tempo a solicitação de retorno foi postada.
Devesh Agrawal
1
Enquanto estou executando a consulta SELECT TIMESTAMPDIFF (SECOND, NOW (), 'selecione lastLoginTime das solicitações em que id =' 2 ''). Está retornando NULL. Alguma idéia do porquê?
Devesh Agrawal
qual é a saída de select lastLoginTime de pedidos em que id = '2'?
FSP
SELECT TIMESTAMPDIFF (SECOND, NOW (), '2012-06-06 08:07:36'); Experimente!
FSP
Sim que está funcionando, mas preciso buscar o segundo parâmetro da tabela. Como conseguir isso. De fato, quero evitar consultas aninhadas. Qualquer ideia?
Devesh Agrawal
3

meus dois centavos sobre lógica:

sintaxe é "data antiga" -: "nova data", portanto:

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

dá 30,

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

dá: -40

ingconti
fonte
2

Se as datas de início e término estiverem em dias diferentes, use TIMEDIFF.

SELECT TIMEDIFF(datetime1,datetime2)

se datetime1> datetime2 então

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

dá: 24:01:00

e datetime1 <datetime2

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

dá: -24: 01: 00

Adi
fonte
Note, só pode lidar com datas com até 839 horas de intervalo
Caius Jard