Diferença entre datas
Publicado por DAVISON MARCEL PASQUALINI (última atualização em 14/01/2010)
[ Hits: 18.113 ]
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ã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.
# 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 --
Cadastro SHELL SCRIPT/MySQL/PHP
Localizar e excluir linhas repetidas em um arquivo texto
estoque.sh - Gerenciamento de estoque/almoxarifado
Bluefin - A nova geração de ambientes de trabalho Linux
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Quer auto-organizar janelas (tiling) no seu Linux? Veja como no Plasma 6 e no Gnome
Copiando caminho atual do terminal direto para o clipboard do teclado
Script de montagem de chroot automatica
Conky não mostra temperaturas da CPU no notebook (1)
Não estou conseguindo fazer funcionar meu Postfix na versão 2.4 no Deb... (0)









