Pular para o conteúdo

Diferença entre datas

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.


DAVISON MARCEL PASQUALINI fdmarp
Hits: 18.235 Categoria: Shell Script Subcategoria: Avançado
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Descrição

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.


Download varia_data.txt Enviar nova versão
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Versões atualizadas deste script

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 --

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

SCRIPT PARA INSTALAÇÃO DE PROGRAMAS NO LINUX

EPD (Editor de Pacotes Debian)

Plugin BACULA

Configuração do VNC Server no Display 0 (terminal que estiver na tela)

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - APAGANDO MSG ANTIGAS

#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

Entre na sua conta para comentar.