My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# ----------------------------------------------------------------------------
# Mostra qual o dia da semana de uma data qualquer.
# Com a opção -n mostra o resultado em forma numérica (domingo=1).
# Obs.: Se a data não for informada, usa a data atual.
# Uso: zzdiadasemana [-n] [data]
# Ex.: zzdiadasemana
# zzdiadasemana 31/12/2010 # sexta-feira
# zzdiadasemana -n 31/12/2010 # 6
#
# Autor: Aurelio Marinho Jargas, www.aurelio.net
# Desde: 2008-10-24
# Versão: 3
# Licença: GPL
# Requisitos: zzdata
# Tags: data
# ----------------------------------------------------------------------------
zzdiadasemana ()
{
zzzz -h diadasemana "$1" && return

local data delta dia
local dias="quinta- sexta- sábado domingo segunda- terça- quarta-"
local dias_rev="quinta- quarta- terça- segunda- domingo sábado sexta-"
local dias_n="5 6 7 1 2 3 4"
local dias_n_rev="5 4 3 2 1 7 6"
# 1=domingo, assim os números são similares aos nomes: 2=segunda

# Opção de linha de comando
if test "$1" = '-n'
then
dias="$dias_n"
dias_rev="$dias_n_rev"
shift
fi

data="$1"

# Se a data não foi informada, usa a atual
test -z "$data" && data=$(date +%d/%m/%Y)

# Validação
zztool -e testa_data "$data" || return 1

# O cálculo se baseia na data ZERO (01/01/1970), que é quinta-feira.
# Basta dividir o delta (intervalo de dias até a data ZERO) por 7.
# O resto da divisão é o dia da semana, sendo 0=quinta e 6=quarta.
#
# A função zzdata considera 01/01/1970 a data zero, e se chamada
# apenas com uma data, retorna o número de dias de diferença para
# o dia zero. O número será negativo se o ano for inferior a 1970.
#
delta=$(zzdata $data)
dia=$(( ${delta#-} % 7)) # remove o sinal negativo (se tiver)

# Se a data é anterior a 01/01/1970, conta os dias ao contrário
test $delta -lt 0 && dias="$dias_rev"

# O cut tem índice inicial um e não zero, por isso dia+1
echo "$dias" |
cut -d ' ' -f $((dia+1)) |
sed 's/-/-feira/'
}

Change log

r710 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: $1 colocado entre aspas na
chamada padrão zzzz -h de todas as
funções.
Go to: 
Sign in to write a code review

Older revisions

r709 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: aspas ao redor de
variáveis.
r668 by aureliojargas on Mar 28, 2012   Diff
lint: removendo espaços inúteis.
r655 by aureliojargas on Mar 23, 2012   Diff
s/Aurélio/Aurelio/ *
All revisions of this file

File info

Size: 1997 bytes, 62 lines
Powered by Google Project Hosting