Diferença entre datas

Publicado por DAVISON MARCEL PASQUALINI (última atualização em 14/01/2010)

[ Hits: 17.777 ]

Download varia_data.txt

Download varia_data2.sh (versão 2)




O script a seguir calcula a diferença entre datas desde 1970. O uso é simples, basta chamar o script passando primeiro a data menor e depois a maior. Ex.:

$ sh varia_data 12/02/2000 15/04/2015
resultado: 5541 dias

É grande mas é rápido, não se assuste.


  



Versões atualizadas deste script

Versão 2 - Enviado por DAVISON MARCEL PASQUALINI em 11/01/2010

Changelog: Uma alteração bem simples, mas que acaba com o limite de tempo e que também torna o script muito mais rápido.

Download varia_data2.sh


Esconder código-fonte

# ROTINA DE VARIACAO DE DATA 
# Codigo pertence a Comunidade 
# VOL (Viva o Linux)
#-------------------------------------------------------
#          Primeira versao:          Davison Pasqualini   
#            29/12/2009                    fdmarp
#-------------------------------------------------------

#-Parametros-----------------------------------

data_inicial=$1
data_final=$2



dia1=`echo $data_inicial | cut -d"/" -f1`
mes1=`echo $data_inicial | cut -d"/" -f2`
ano1=`echo $data_inicial | cut -d"/" -f3`
dia2=`echo $data_final | cut -d"/" -f1`
mes2=`echo $data_final | cut -d"/" -f2`
ano2=`echo $data_final | cut -d"/" -f3`


#-Calculo--------------------------------------
verifica_bissexto ()
{
verif1=`echo scale=3\;$ano_val/4 |bc | cut -d. -f2`
if [  "$verif1" -eq 0 ]; then
verifica_bissexto_p2
else 
bissexto="0"
fi
}

verifica_bissexto_p2 ()
{
verif2=`echo scale=3\;$ano_val/100 |bc | cut -d. -f2`
if [  "$verif2" -eq 0 ]; then
verifica_bissexto_p3
else 
bissexto="1"
fi
}

verifica_bissexto_p3 ()
{
verif3=`echo scale=3\;$ano_val/400 |bc | cut -d. -f2`
if [  "$verif3" -eq 0 ]; then
bissexto="1"
else 
bissexto="0"
fi
}

verifica_bissexto_p4 ()
{
ano_val=`expr $ano_fim + 1`
verifica_bissexto
if [ "$bissexto" -eq 0 ]; then
dias_count=`expr $dias_count + 28`
else
dias_count=`expr $dias_count + 29`
fi
}


varia_ano ()
{
dias_count=0
ano_val=1970
while [ "$ano_val" -le "$ano_fim" ];
do
verifica_bissexto
if [ "$bissexto" -eq 0 ]; then
dias_count=`expr $dias_count + 365`
else
dias_count=`expr $dias_count + 366`
fi
ano_val=`expr $ano_val + 1`
done
varia_mes
}

varia_mes ()
{
mes_val=1
while [ "$mes_val" -le "$mes_fim" ];
do
case "$mes_val" in
"1" | "3" | "5" | "7" | "8" | "10" | "12" )
dias_count=`expr $dias_count + 31`
;;
"01" | "03" | "05" | "07" | "08" )
dias_count=`expr $dias_count + 31`
;;
"4" | "04" | "6" | "06" | "9" | "09" | "11" )
dias_count=`expr $dias_count + 30`
;;

"2" | "02" )
verifica_bissexto_p4
;;
esac
mes_val=`expr $mes_val + 1` 
done
varia_dia
}

varia_dia ()
{
dias_count=`expr $dia_fim + $dias_count`
}

dia_fim=`expr $dia1 - 1`
ano_fim=`expr $ano1 - 1`
mes_fim=`expr $mes1 - 1`
varia_ano
Varia_dias_data1=$dias_count


dia_fim=`expr $dia2 - 1`
ano_fim=`expr $ano2 - 1`
mes_fim=`expr $mes2 - 1`
varia_ano
Varia_dias_data2=$dias_count

resultado=`expr $Varia_dias_data2 - $Varia_dias_data1`

echo "resultado: $resultado dias"

#-------------------------------------- FIM --


Scripts recomendados

Script para criar certificados de forma automatizada no OpenVpn

Download do banco de dados NCBI NR (DNA)

Firewall com proxy transparente completo

Script para renomear arquivos

Backup com dump, restore, sendmail e log completo


  

Comentários
[1] Comentário enviado por fdmarp em 08/01/2010 - 17:06h

Se o seu SO possui no date a opção +%s a versão simplificada atende muito bem.

#/bin/sh
# ROTINA DE VARIACAO DE SEGUNDOS ENTRE DUAS DATAS
# Codigo pertence a Comunidade
# VOL (Viva o Linux)
#-------------------------------------------------------
# Primeira versao: Davison Pasqualini
# 04/01/2010 fdmarp
#-------------------------------------------------------

data_inicial=`echo $1 | awk -F/ '{ print $2"/"$1"/"$3 }'`
data_final=`echo $3 | awk -F/ '{ print $2"/"$1"/"$3 }'`
hora_inicial=$2
hora_final=$4
data_seg1=`date +%s --date="$data_inicial $hora_inicial"`
data_seg2=`date +%s --date="$data_final $hora_final"`
resultado=`expr $data_seg2 - $data_seg1`
echo $resultado

[2] Comentário enviado por fdmarp em 11/01/2010 - 18:51h

Fica melhor se substituir

ano_val=1970

por

ano_val=$ano1


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts