NewtonJr.
(usa CentOS)
Enviado em 29/12/2015 - 12:42h
p4ulodi4s escreveu:
segundos=$( date -d $( date +%Y-%m-%d ) +%s )
Paulo, Obrigado pelos códigos. Já estou usando eles.
Na parte de transformar pra segundos, fiz um teste com o seguinte código e está dando erro. Lembrando que as datas são informadas pelo usuário.
n_segundos_data_ini=$( date -d "$data_ini" +%s )
n_segundos_data_fim=$( date -d "$data_fim" +%s )
if [ $n_segundos_data_ini -gt $n_segundos_data_fim ]; then echo "Erro! Data final é menor do que a Data Inicial." && exit 1
Outra questão é que usuei o código que você informou da seguinte forma:
[ "$data_ini" ] || data_ini=$( date +01/%m/%Y )
[ "$data_fim" ] || data_fim=$( date -d "$( date +%Y-%m-01 ) + 1 month - 1 day" +%d/%m/%Y )
Mas a lógica certa no meu caso seria:
if "$data_ini" é vazio ou "$data_fim" é vazio then
data_ini=$( date +01/%m/%Y )
data_fim=$( date -d "$( date +%Y-%m-01 ) + 1 month - 1 day" +%d/%m/%Y )
fi
Como fazer isso em shell?
Por fim, eu usei o código do outro Paulo para testar se as datas são válidas.
if ! [[ "$data_ini" =~ ^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/([0-9]{4})$ ]]; then
echo "Data inicial inválida" >&2
exit 1
fi
year=${BASH_REMATCH[3]}
month=${BASH_REMATCH[2]}
day=${BASH_REMATCH[1]}
if ! date -d "$year/$month/$day" >/dev/null 2>&1; then
echo "Data inicial inválida" >&2
exit 1
fi
if ! [[ "$data_fim" =~ ^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/([0-9]{4})$ ]]; then
echo "Data final inválida" >&2
exit 1
fi
year=${BASH_REMATCH[3]}
month=${BASH_REMATCH[2]}
day=${BASH_REMATCH[1]}
if ! date -d "$year/$month/$day" >/dev/null 2>&1; then
echo "Data final inválida" >&2
exit 1
fi
Veja que repeti o mesmo código duas vezes. Como fazer isso usando uma função?
Obrigado pelos comentários. Está quase pronto. Oss!