Cálculo de diferença de data [duplicado]

2

Estou procurando calcular a diferença de tempo entre os dois abaixo

Value1=2016-10-13 14:19:23
Value2=2016-10-13 18:19:23 

Eu quero obter diferença na forma de horas / minutos. Qualquer solução rápida disponível?.

    
por serverliving.com 18.10.2016 / 11:14

3 respostas

5

Você pode usar date (assumindo a implementação GNU) com a substituição de comando, e para obter a diferença entre os tempos use a expansão aritmética:

% Value1='2016-10-13 14:19:23'

% Value2='2016-10-13 18:19:23' 

% echo "$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s')))"
14400

O resultado é em segundos.

    
por 18.10.2016 / 11:28
2
$ datediff -f "%H hours and %M minutes" "2016-10-13 14:19:23" "2016-10-13 18:19:23"
4 hours and 0 minutes

O datediff é do pacote dateutuils. link

Observe que, ao contrário do comando date , dateutils ignora as configurações do local por padrão usando o GMT. Isso pode fazer uma diferença de hora em relação ao ajuste no horário de verão.

Compare:

$ datediff  -f "%H:%M" "2016-10-29 14:00:00" "2016-10-30 14:00:00"
24:0

e

$ datediff --from-zone=Europe/Berlin  -f "%H:%M" "2016-10-29 14:00:00" "2016-10-30 14:00:00"
25:0
    
por 18.10.2016 / 11:37
1

A resposta em horas / minutos / segundos:

date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%T'

A resposta em apenas algumas horas / minutos (conforme solicitado originalmente):

date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%H:%M'

O acima exposto supõe que o usuário está interessado apenas na diferença em horas e minutos e ignora diferenças de dia. A resposta depende do que se deseja.

Para lidar com diferenças maiores ou iguais a um dia:

Value1='2016-10-13 14:19:23'
Value2='2016-10-18 10:34:58'

D1=$(date -d "$Value1" '+%s'); D2=$(date -d "$Value2" '+%s')
echo "$(((D2-D1)/86400)):$(date -u -d@$((D2-D1)) +%H:%M)"

rendimentos:

4:20:15

E para vários shells, também é possível fazer coisas como no Bash:

declare -i Delta=D2-D1
declare -i Days=Delta/86400
echo "$Days:$(date -u -d@$Delta +%H:%M)"
    
por 18.10.2016 / 11:35