Cálculo de dias úteis [RESOLVIDO]

1. Cálculo de dias úteis [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 30/10/2020 - 10:36h

pessoas ... tô enrolado para fazer o seguinte

Dia_inicial=01/10/2020
dia final=HOJE

contar as dias entre a data inicial e hoje que não são nem sábado nem domingo ( incluindo data inicial e hoje ) e multiplicar por 300.

até achei como ver o dia da semana, mas fiquei confuso de como fazer o loop.


  


2. Re: Cálculo de dias úteis [RESOLVIDO]

Moises Viana Felipe
viana3

(usa openSUSE)

Enviado em 30/10/2020 - 11:59h

Mauriciodez escreveu:

pessoas ... tô enrolado para fazer o seguinte

Dia_inicial=01/10/2020
dia final=HOJE

contar as dias entre a data inicial e hoje que não são nem sábado nem domingo ( incluindo data inicial e hoje ) e multiplicar por 300.

até achei como ver o dia da semana, mas fiquei confuso de como fazer o loop.


Tente focar na periodicidade dos dias. Por exemplo se 01/10/2020 cair em um sábado, o dia 08/102020 também será sábado, ou seja sábados e domingos se repetem a cada sete dias.


3. Re: Cálculo de dias úteis

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 30/10/2020 - 17:01h

Mauriciodez escreveu:

pessoas ... tô enrolado para fazer o seguinte

Dia_inicial=01/10/2020
dia final=HOJE

contar as dias entre a data inicial e hoje que não são nem sábado nem domingo ( incluindo data inicial e hoje ) e multiplicar por 300.

até achei como ver o dia da semana, mas fiquei confuso de como fazer o loop.

Boa tarde Mauricio, tudo certo.....
Veja se ajuda:
ncal -hM 10 2020|awk 'NR>1 && NR<=6 {sum+=NF;}END{print "Dias Uteis: "(sum-5)}'
Dias Úteis: 22

Lógica:
ncal -hM 10 2020 # Out 2020
    Outubro 2020
se 5 12 19 26
te 6 13 20 27
qu 7 14 21 28
qu 1 8 15 22 29
se 2 9 16 23 30
3 10 17 24 31
do 4 11 18 25

awk, "pega" da linha 2 ate a 6, isso "exclui" 'Outubro 2020' , 'sá' e 'do',
sum+=NF; conta os registros,
(sum-5): subtrai 5, pq contou os campos que tem o dia da semana;

+ uma opção
seq 30|xargs -i date -d"2020-10-{}" +%a' '%x|sed '/sáb/d;/dom/d'|wc -l
22

Muito mais rápido....

#86400 = segundos em um dia:
#echo $((60*60*24))
uts=$(date -d"2020-10-01 00:00:00" +%s); #Nº de segundos na data inicial.
gawk -v t=$uts 'BEGIN {for(i=0;i<=30;i++) printf "%s\n" ,strftime("%a %x", t+86400*i)}'|sed -nr '/(sáb|dom)/!p'|wc -l;
22

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:
Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.

______________________________________________________________________



4. Re: Cálculo de dias úteis [RESOLVIDO]

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 30/10/2020 - 19:26h

Vou sugerir um algoritmo aqui: pegue a qde de dias e faça divisão por 7 ( no dias da semana) . Pegue o resto e a parte inteira.
Multiplique a parte inteira por 5(no de dias úteis) e adicione o resto da conta anterior.
Se o dia inicial for domingo vc subtrai 1 e se for sabado subtrai 2 p ajustar.


5. Re: Cálculo de dias úteis [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 02/11/2020 - 13:03h


depois de muita dor de cabeça consegui resolver meu problema.

para minha situação o script ficou assim.

#!/bin/bash

y=0
x=`echo $(( ( $(date +%s) - $(date -d "09/28/2020" +%s) ) / 86400 +1 ))`

while ((x--));do

if [ $(date -d "$x day ago" +%A) != "sábado" ] && [ $(date -d "$x day ago" +%A) != "domingo" ]; then
y=$((++y))
fi

done

echo $(( $y * 300 ))




------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




6. Re: Cálculo de dias úteis [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 02/11/2020 - 18:03h


Mauriciodez escreveu:


depois de muita dor de cabeça consegui resolver meu problema.

para minha situação o script ficou assim.

#!/bin/bash

y=0
x=`echo $(( ( $(date +%s) - $(date -d "09/28/2020" +%s) ) / 86400 +1 ))`
while ((x--));do
if [ $(date -d "$x day ago" +%A) != "sábado" ] && [ $(date -d "$x day ago" +%A) != "domingo" ]; then
y=$((++y))
fi

done
echo $(( $y * 300 ))




------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------


Sugestão:
Troque o condicional:
if [ $(date -d "$x day ago" +%A) != "sábado" ] && [ $(date -d "$x day ago" +%A) != "domingo" ]; then
y=$((++y))
fi

Por:
[[ $(date -d "$x day ago" +%A) != "(sábado|domingo)" ]] && let y++ 


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________