Discussion:
Diferença entre duas Datas
fsilva6
2011-02-05 15:47:03 UTC
Permalink
Estou montando um script que traz com resultado o total de dias entre duas datas.

date1=20101210
date2=20100127

echo $date1 $date2 | awk '{

#parse
yearStar=substr($1,1,4);
mothStar=substr($1,5,2);
dayStar=substr($1,7,2);

yearEnd=substr($2,1,4);
monthEnd=substr($2,5,2);
dayEnd=substr($2,7,2);

#Pegar Segundos
secs1=((yearStar - 1970)*365.25+(mothStar*30.5)+dayStar)*24*60*60;
secs2=((yearEnd - 1970)*365.25+(monthEnd*30.5)+dayEnd)*24*60*60;

#Subtracao
diffSecs=secs1 - secs2;

#Segundos Para Dia
print diffSecs/86400;
}'


Como Resultado estou obtendo o valor 318.5 .
Só que valor correto deveria ser 316.

Alguém pode me ajudar a identificar onde estou errando...Vale lembrar que estou usando o AIX (AIX XXXXX 3 5 0023082B4C00 - Release 5300-10).
fsilva6
2011-02-05 15:50:54 UTC
Permalink
Estou montando um script que traz com resultado o total de dias entre duas datas.

date1=20101210
date2=20100127

echo $date1 $date2 | awk '{

#parse
yearStar=substr($1,1,4);
mothStar=substr($1,5,2);
dayStar=substr($1,7,2);

yearEnd=substr($2,1,4);
monthEnd=substr($2,5,2);
dayEnd=substr($2,7,2);

#Pegar Segundos
secs1=((yearStar - 1970)*365.25+(mothStar*30.5)+dayStar)*24*60*60;
secs2=((yearEnd - 1970)*365.25+(monthEnd*30.5)+dayEnd)*24*60*60;

#Subtracao
diffSecs=secs1 - secs2;

#Segundos Para Dia
print diffSecs/86400;
}'


Como Resultado estou obtendo o valor 318.5 .
Só que valor correto deveria ser 316.

Alguém pode me ajudar a identificar onde estou errando...Vale lembrar que estou usando o AIX (AIX XXXXX 3 5 0023082B4C00 - Release 5300-10).
Rodrigo Lang
2011-02-05 21:27:19 UTC
Permalink
Post by fsilva6
Estou montando um script que traz com resultado o total de dias entre duas datas.
Eu não sou nenhum especialista nem nada, mas não seria melhor converter
essas datas para unixtime e diminuir a data mais atual pela mais antiga?
Dessa forma você teria o número em segundos de diferença entre as datas e
poderia trabalhar facilmente com este número...

É só uma sugestão. Tirando isso, não consigo te ajudar porque não manjo
muito de AWK.


At,
--
Rodrigo Lang
Opening your mind - Just another Open Source
site<http://openingyourmind.wordpress.com/>


[As partes desta mensagem que não continham texto foram removidas]
Ivan lopes
2011-02-05 16:00:45 UTC
Permalink
uma coisa que nunca consegui fazer eh cálculos com datas em shell, alguém
tem alguma dica bacana ???
Post by fsilva6
Estou montando um script que traz com resultado o total de dias entre duas datas.
date1=20101210
date2=20100127
echo $date1 $date2 | awk '{
#parse
yearStar=substr($1,1,4);
mothStar=substr($1,5,2);
dayStar=substr($1,7,2);
yearEnd=substr($2,1,4);
monthEnd=substr($2,5,2);
dayEnd=substr($2,7,2);
#Pegar Segundos
secs1=((yearStar - 1970)*365.25+(mothStar*30.5)+dayStar)*24*60*60;
secs2=((yearEnd - 1970)*365.25+(monthEnd*30.5)+dayEnd)*24*60*60;
#Subtracao
diffSecs=secs1 - secs2;
#Segundos Para Dia
print diffSecs/86400;
}'
Como Resultado estou obtendo o valor 318.5 .
Só que valor correto deveria ser 316.
Alguém pode me ajudar a identificar onde estou errando...Vale lembrar que
estou usando o AIX (AIX XXXXX 3 5 0023082B4C00 - Release 5300-10).
[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: shell-script-***@yahoogrupos.com.br
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Fernando Mercês
2011-02-05 16:30:00 UTC
Permalink
Acho que a melhor dica seria usar as funcoeszz [http://funcoeszz.net/], mais
especificamente a função zzdata.

Abraços.

Att,

@Fernando Mercês <http://twitter.com/FernandoMerces>
Linux Registered User #432779
www.mentebinaria.com.br
http://linuxreversing.org
http://softwarelivre-rj.org
------------------------------------
Participe do I Hack'n Rio <http://hacknrio.org/>
------------------------------------
Post by Ivan lopes
uma coisa que nunca consegui fazer eh cálculos com datas em shell, alguém
tem alguma dica bacana ???
Post by fsilva6
Estou montando um script que traz com resultado o total de dias entre
duas
Post by fsilva6
datas.
date1=20101210
date2=20100127
echo $date1 $date2 | awk '{
#parse
yearStar=substr($1,1,4);
mothStar=substr($1,5,2);
dayStar=substr($1,7,2);
yearEnd=substr($2,1,4);
monthEnd=substr($2,5,2);
dayEnd=substr($2,7,2);
#Pegar Segundos
secs1=((yearStar - 1970)*365.25+(mothStar*30.5)+dayStar)*24*60*60;
secs2=((yearEnd - 1970)*365.25+(monthEnd*30.5)+dayEnd)*24*60*60;
#Subtracao
diffSecs=secs1 - secs2;
#Segundos Para Dia
print diffSecs/86400;
}'
Como Resultado estou obtendo o valor 318.5 .
Só que valor correto deveria ser 316.
Alguém pode me ajudar a identificar onde estou errando...Vale lembrar que
estou usando o AIX (AIX XXXXX 3 5 0023082B4C00 - Release 5300-10).
[As partes desta mensagem que não continham texto foram removidas]
------------------------------------
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Links do Yahoo! Grupos
[As partes desta mensagem que não continham texto foram removidas]
MrBiTs
2011-02-05 17:15:19 UTC
Permalink
uma coisa que nunca consegui fazer eh cálculos com datas em shell, alguém
tem alguma dica bacana ???
É muito simples. Converta a data em Unix timestamp (quantidade de segundos que se passaram desde as 00:00 de 01/01/1970) e faça a
conta. Depois, converta novamente para data. O date +%s é seu amigo.

- --

LLAP

.0. MrBiTs - ***@gmail.com
..0 GnuPG - http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
000 http://www.mrbits.com.br
Ivan lopes
2011-02-05 18:34:39 UTC
Permalink
muito obrigado amigos.
gostei da dicas de vcs!
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Post by Ivan lopes
uma coisa que nunca consegui fazer eh cálculos com datas em shell, alguém
tem alguma dica bacana ???
É muito simples. Converta a data em Unix timestamp (quantidade de segundos
que se passaram desde as 00:00 de 01/01/1970) e faça a
conta. Depois, converta novamente para data. O date +%s é seu amigo.
- --
LLAP
..0 GnuPG -
http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
000 http://www.mrbits.com.br
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (Darwin)
iQEcBAEBCAAGBQJNTYWnAAoJEG7IGPwrPKWrYdYIAIoLJdbfsvHKLADWbrLzSpqd
y1EOGIVpqapI5BLllb3IiooZClgzdQwyQhdq0UXJwWhTynKmEfWgQQxzCZvL7pal
itv6shbmerpsyn+kz61zrWNSMvSNpu40OhogIKGQNz2/gJNXJIjNrufcMqg47Cnx
Ived14wO8zGKCEST3O5rlegkH/+j2NIypjMaw6zb0PH2pMY9PE7sASwpcuFB8jlt
ntmUL5OP2Pe9Cf06E6roQME4s8BuSZxgBIGwqshqB7luhw5VWpzXkSxaUNgjkqs+
Gt9BHve1gLLVfz+WwK2I0AclhPsC3A9yKtzxaywq44E4NyK04cGLHRAY6G5KnK4=
=iHCV
-----END PGP SIGNATURE-----
[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: shell-script-***@yahoogrupos.com.br
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
fsilva6
2011-02-05 18:16:00 UTC
Permalink
Tentei executar o comando abaixo na AIX XXXXX 3 5 0023082B4C00 mas não obtive sucesso.

SEC=$(date -d "20101001" +"%Y%m%d" %s)

echo $SEC/86400 | bc


O parâmetro -d não funciona no AIX.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Post by Ivan lopes
uma coisa que nunca consegui fazer eh cálculos com datas em shell, alguém
tem alguma dica bacana ???
É muito simples. Converta a data em Unix timestamp (quantidade de segundos que se passaram desde as 00:00 de 01/01/1970) e faça a
conta. Depois, converta novamente para data. O date +%s é seu amigo.
- --
LLAP
..0 GnuPG - http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
000 http://www.mrbits.com.br
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (Darwin)
iQEcBAEBCAAGBQJNTYWnAAoJEG7IGPwrPKWrYdYIAIoLJdbfsvHKLADWbrLzSpqd
y1EOGIVpqapI5BLllb3IiooZClgzdQwyQhdq0UXJwWhTynKmEfWgQQxzCZvL7pal
itv6shbmerpsyn+kz61zrWNSMvSNpu40OhogIKGQNz2/gJNXJIjNrufcMqg47Cnx
Ived14wO8zGKCEST3O5rlegkH/+j2NIypjMaw6zb0PH2pMY9PE7sASwpcuFB8jlt
ntmUL5OP2Pe9Cf06E6roQME4s8BuSZxgBIGwqshqB7luhw5VWpzXkSxaUNgjkqs+
Gt9BHve1gLLVfz+WwK2I0AclhPsC3A9yKtzxaywq44E4NyK04cGLHRAY6G5KnK4=
=iHCV
-----END PGP SIGNATURE-----
Ivan lopes
2011-02-05 20:04:41 UTC
Permalink
SEC=$(date -d "20101001" +"%s" )
Post by fsilva6
Tentei executar o comando abaixo na AIX XXXXX 3 5 0023082B4C00 mas não obtive sucesso.
SEC=$(date -d "20101001" +"%Y%m%d" %s)
echo $SEC/86400 | bc
O parâmetro -d não funciona no AIX.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Post by Ivan lopes
uma coisa que nunca consegui fazer eh cálculos com datas em shell,
alguém
Post by Ivan lopes
tem alguma dica bacana ???
É muito simples. Converta a data em Unix timestamp (quantidade de
segundos que se passaram desde as 00:00 de 01/01/1970) e faça a
conta. Depois, converta novamente para data. O date +%s é seu amigo.
- --
LLAP
..0 GnuPG -
http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
000 http://www.mrbits.com.br
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (Darwin)
iQEcBAEBCAAGBQJNTYWnAAoJEG7IGPwrPKWrYdYIAIoLJdbfsvHKLADWbrLzSpqd
y1EOGIVpqapI5BLllb3IiooZClgzdQwyQhdq0UXJwWhTynKmEfWgQQxzCZvL7pal
itv6shbmerpsyn+kz61zrWNSMvSNpu40OhogIKGQNz2/gJNXJIjNrufcMqg47Cnx
Ived14wO8zGKCEST3O5rlegkH/+j2NIypjMaw6zb0PH2pMY9PE7sASwpcuFB8jlt
ntmUL5OP2Pe9Cf06E6roQME4s8BuSZxgBIGwqshqB7luhw5VWpzXkSxaUNgjkqs+
Gt9BHve1gLLVfz+WwK2I0AclhPsC3A9yKtzxaywq44E4NyK04cGLHRAY6G5KnK4=
=iHCV
-----END PGP SIGNATURE-----
[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: shell-script-***@yahoogrupos.com.br
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Ivan lopes
2011-02-05 20:05:55 UTC
Permalink
descuple,
*
SEC=$(date -d "20101001" +"%Y%m%d" %s)*
altere seu comando pelo comando acima.
Post by Ivan lopes
SEC=$(date -d "20101001" +"%s" )
Post by fsilva6
Tentei executar o comando abaixo na AIX XXXXX 3 5 0023082B4C00 mas não obtive sucesso.
SEC=$(date -d "20101001" +"%Y%m%d" %s)
echo $SEC/86400 | bc
O parâmetro -d não funciona no AIX.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Post by Ivan lopes
uma coisa que nunca consegui fazer eh cálculos com datas em shell,
alguém
Post by Ivan lopes
tem alguma dica bacana ???
É muito simples. Converta a data em Unix timestamp (quantidade de
segundos que se passaram desde as 00:00 de 01/01/1970) e faça a
conta. Depois, converta novamente para data. O date +%s é seu amigo.
- --
LLAP
..0 GnuPG -
http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
000 http://www.mrbits.com.br
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (Darwin)
iQEcBAEBCAAGBQJNTYWnAAoJEG7IGPwrPKWrYdYIAIoLJdbfsvHKLADWbrLzSpqd
y1EOGIVpqapI5BLllb3IiooZClgzdQwyQhdq0UXJwWhTynKmEfWgQQxzCZvL7pal
itv6shbmerpsyn+kz61zrWNSMvSNpu40OhogIKGQNz2/gJNXJIjNrufcMqg47Cnx
Ived14wO8zGKCEST3O5rlegkH/+j2NIypjMaw6zb0PH2pMY9PE7sASwpcuFB8jlt
ntmUL5OP2Pe9Cf06E6roQME4s8BuSZxgBIGwqshqB7luhw5VWpzXkSxaUNgjkqs+
Gt9BHve1gLLVfz+WwK2I0AclhPsC3A9yKtzxaywq44E4NyK04cGLHRAY6G5KnK4=
=iHCV
-----END PGP SIGNATURE-----
[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: shell-script-***@yahoogrupos.com.br
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
fsilva6
2011-02-05 20:09:44 UTC
Permalink
Amigão,
mais uma vez não obtive sucesso.

[/XOPTO] SEC=$(date -d "20101001" +"%Y%m%d" %s)*
date: illegal option -- d
Usage: date [-u] [+Field Descriptors]


Minha versão do AIX é a "AIX USER 5 0023082B4C00"
Post by Ivan lopes
descuple,
*
SEC=$(date -d "20101001" +"%Y%m%d" %s)*
altere seu comando pelo comando acima.
Post by Ivan lopes
SEC=$(date -d "20101001" +"%s" )
Post by fsilva6
Tentei executar o comando abaixo na AIX XXXXX 3 5 0023082B4C00 mas não
obtive sucesso.
SEC=$(date -d "20101001" +"%Y%m%d" %s)
echo $SEC/86400 | bc
O parâmetro -d não funciona no AIX.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Post by Ivan lopes
uma coisa que nunca consegui fazer eh cálculos com datas em shell,
alguém
Post by Ivan lopes
tem alguma dica bacana ???
É muito simples. Converta a data em Unix timestamp (quantidade de
segundos que se passaram desde as 00:00 de 01/01/1970) e faça a
conta. Depois, converta novamente para data. O date +%s é seu amigo.
- --
LLAP
..0 GnuPG -
http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
000 http://www.mrbits.com.br
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (Darwin)
iQEcBAEBCAAGBQJNTYWnAAoJEG7IGPwrPKWrYdYIAIoLJdbfsvHKLADWbrLzSpqd
y1EOGIVpqapI5BLllb3IiooZClgzdQwyQhdq0UXJwWhTynKmEfWgQQxzCZvL7pal
itv6shbmerpsyn+kz61zrWNSMvSNpu40OhogIKGQNz2/gJNXJIjNrufcMqg47Cnx
Ived14wO8zGKCEST3O5rlegkH/+j2NIypjMaw6zb0PH2pMY9PE7sASwpcuFB8jlt
ntmUL5OP2Pe9Cf06E6roQME4s8BuSZxgBIGwqshqB7luhw5VWpzXkSxaUNgjkqs+
Gt9BHve1gLLVfz+WwK2I0AclhPsC3A9yKtzxaywq44E4NyK04cGLHRAY6G5KnK4=
=iHCV
-----END PGP SIGNATURE-----
[As partes desta mensagem que não continham texto foram removidas]
MrBiTs
2011-02-05 23:56:43 UTC
Permalink
Amigão,
mais uma vez não obtive sucesso.
Não costumamos fazer isso, mas será que não está na hora de você fazer um man date e ver qual opção é a correlata ao -d ? Ou você
realmente quer que a lista faça o seu trabalho ?

- --

LLAP

.0. MrBiTs - ***@gmail.com
..0 GnuPG - http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
000 http://www.mrbits.com.br
Thiago Diniz da Silveira
2011-02-06 00:39:35 UTC
Permalink
date: illegal option -- d
Usage: date [-u] [+Field Descriptors]

Tenta -u ué.. ta escrito ali.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Post by fsilva6
Amigão,
mais uma vez não obtive sucesso.
Não costumamos fazer isso, mas será que não está na hora de você fazer um
man date e ver qual opção é a correlata ao -d ? Ou você
realmente quer que a lista faça o seu trabalho ?
- --
LLAP
..0 GnuPG -
http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
000 http://www.mrbits.com.br
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (Darwin)
iQEcBAEBCAAGBQJNTeO7AAoJEG7IGPwrPKWrdYEH+QFfA4kzBeHhdeHMYfkryr0u
/InUNvrINXRJnSQKVDUTUfFE44Ddw1F1wW1bwVf8K7ZgVjn/2njUkAYYwlXYlKvn
x6wPgar8p70Gf1xpaNVNLtkHBP7/RUFDVF2jkGQP/5N0YmIAqUF/DvjUft8KgYJW
9cw0KRwxLtZRlejkMP2KrQ4ekaInrRHgSFQGappFJiPGOxpAOCcpnqcm3W4+NJxS
nGA9+1IrhiXZc/6c6QcTTSKsjsA/Q99UxoEFwB6bGk3zYs9r4O3NRaWO9Zz0KEBI
TlM7cn3l678oEVXL6DW1EpmnjM5CjIKfSFiAa9ZSjMyeCDTyYbIMR7QQ/SMIYE4=
=hUeJ
-----END PGP SIGNATURE-----
[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: shell-script-***@yahoogrupos.com.br
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Jose Edson Moreno Jr
2011-02-08 02:11:31 UTC
Permalink
Oi ,

Bom quando vamos mexer com datas temos que ter bem claro o que desejamos
manipular, pois senão cometemos erros:

Primeira coisa:
No intervalo de datas entre 20100127 à 20101210 , temos na verdade 317
dias a saber :

de 27/01/2010 31/01/2010 - 4 dias
02/2010 - 28 dias
03/2010 - 31 dias
04/2010 - 30 dias
05/2010 - 31 dias
06/2010 - 30 dias
07/2010 - 31 dias
08/2010 - 31 dias
09/2010 - 30 dias
10/2010 - 31 dias
11/2010 - 30 dias
01/12/2010 `a 10/12/2010 - 10 dias
Total = 317 dias

Bom, se deseja algo direto em shell e utilizando o que vem em linux, pode
-se se utilizar o seguinte script:

#!/bin/bash
data_inicial=$1
data_final=$2
# Extrai as datas da entrada usando o date, assim não me preocupo com
formatacao de entrada, desde que seja data, o date trata
ano_inicial=$(date --date "${data_inicial}" +"%Y")
mes_inicial=$(date --date "${data_inicial}" +"%m")
dia_inicial=$(date --date "${data_inicial}" +"%d")
ano_final=$(date --date "${data_final}" +"%Y")
mes_final=$(date --date "${data_final}" +"%m")
dia_final=$(date --date "${data_final}" +"%d")
# Verifico se o intervalo esta no mesmo ano
if [ ${ano_inicial} -ne ${ano_final} ]; then
# Caso nao esteja, vejo o numero de dias ate o final do ano inicial
total_dias=$(date --date "${ano_inicial}0101 + $(($(date
--date="${ano_inicial}1231" +%s) - $(date
--date="${ano_inicial}${mes_inicial}${dia_inicial}" +%s) - 86399)) sec"
+"%j")
cont_ano=0
# Aqui e o pulo de gato para o date tratar diferencas maiores que
365 dias, faco um loop para contar os dias dos anos
while [ $((ano_final - ano_inicial - cont_ano)) -ne 0 ]; do
cont_ano=$((cont_ano + 1))
# Verifico se a diferenca de anos e maior que 1
if [ ${ano_final} -eq $((ano_inicial + cont_ano)) ]; then
# Sendo menor simplesmente calculo o total de dias
do ano seguinte e somo ao inicio
total_dias=$((total_dias + $(date --date
"${ano_final}0101 + $(($(date --date="${ano_final}${mes_final}${dia_final}"
+%s) - $(date --date="${ano_final}0101" +%s) )) sec" +"%j" )))
else
# Sendo maior que 1 ano, pego o numero de dias do ano
e acumulo
total_dias=$((total_dias + $(date --date
"$((ano_inicial + cont_ano))0101 + $(($(date --date="$((ano_inicial +
cont_ano))1231" +%s) - $(date --date="$((ano_inicial + cont_ano))0101" +%s)
)) sec" +"%j" )))
fi
done
else
# Faco o calculo de dias no ano
total_dias=$(date --date "${ano_inicial}0101 + $(($(date
--date="${ano_final}${mes_final}${dia_final}" +%s) - $(date
--date="${ano_inicial}${mes_inicial}${dia_inicial}" +%s) - 86399)) sec"
+"%j")
fi
echo "${total_dias} dias corridos"


Alguns detalhes a respeito deste calculo :

1 - O comando date faz contas somente com numero serial de segundos a partir
de 01/01/1970 , portanto este script somente funciona para datas a partir
desta data
2 - Este tipo de calculo somente obtem o numero total de dias corridos em um
ano, ou seja no maximo 365 dias ou 366 dias para anos bisextos, para
trabalhar com intervalos maiores, temos que adptar
3 - Toda vez que mexemos com numeros serias de segundos, temos que adequa-lo
ao ano em questão, por este motivos há calculos de diferenças nos dates,
somente para obter o numero real de segundos naquele ano

Pessoal, este é um script testado em bash no linux ( bash versão
4.1.5(1)-release e date (GNU coreutils) 8.5 ) , para outros sistemas e
shell, adequa-lo a situação. Somente estou demonstrando uma maneira de fazer
isso em shell com recursos gnu, vendo que houve dificuldades a respeito
disto, há meios mais simples de se fazer isso utilizando-se de outras
linguagens ..

Boa sorte pessoal !
Post by fsilva6
Estou montando um script que traz com resultado o total de dias entre duas datas.
date1=20101210
date2=20100127
echo $date1 $date2 | awk '{
#parse
yearStar=substr($1,1,4);
mothStar=substr($1,5,2);
dayStar=substr($1,7,2);
yearEnd=substr($2,1,4);
monthEnd=substr($2,5,2);
dayEnd=substr($2,7,2);
#Pegar Segundos
secs1=((yearStar - 1970)*365.25+(mothStar*30.5)+dayStar)*24*60*60;
secs2=((yearEnd - 1970)*365.25+(monthEnd*30.5)+dayEnd)*24*60*60;
#Subtracao
diffSecs=secs1 - secs2;
#Segundos Para Dia
print diffSecs/86400;
}'
Como Resultado estou obtendo o valor 318.5 .
Só que valor correto deveria ser 316.
Alguém pode me ajudar a identificar onde estou errando...Vale lembrar que
estou usando o AIX (AIX XXXXX 3 5 0023082B4C00 - Release 5300-10).
--
Jose Edson Moreno Jr.


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: shell-script-***@yahoogrupos.com.br
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Continue reading on narkive:
Loading...