Respostas:
ring0 me venceu por alguns segundos, mas o comando completo é:
echo $(($(date --utc --date "$1" +%s)/86400))
Isso passa pela hora UTC. Resultado:
root@hostname:~# echo $((`date --utc --date "$1" +%s`/86400))
14984
Uma verificação rápida com WolframAlpha mostra que esse é o valor correto.
Eu acho que este é o método mais simples:
expr $(date +%s) / 86400
Eu precisava resolver isso também, mas queria obter o mesmo valor para o dia # independentemente da hora do dia. Com abordagens como as mostradas aqui, o valor será alterado à meia-noite UTC, em vez da meia-noite, horário local. Provavelmente, isso parece ser um problema menor na UE ou na costa leste dos EUA, que são próximas o suficiente do UTC para que o valor do dia não mude no meio do dia normal de trabalho, mas, por exemplo, na Califórnia, o dia muda ocorreria às 16:00 PST, o que pode ser inconveniente. Eu imagino que os australianos ficariam especialmente irritados por mudar o valor do dia no final da manhã.
Se quisermos corrigir isso, precisamos adicionar o deslocamento do UTC antes de dividir por segundos / dia. Felizmente, o comando date do Linux inclui uma sequência de formato % z que relata o deslocamento do UTC. Enquanto o formato padrão (este resultado é para o horário de Denver, MDT):
$ date +%z
-0600
. . . não é diretamente utilizável em um cálculo, os modificadores certos produzirão o que queremos:
$ date +%-:::z
-6
Coloque isso junto com as conversões usuais de segundos / horas / dias, e acredito que o seguinte deve gerar os dias desde 1/1/1970, com 1/1/1970 sendo o dia zero e o valor aumentando à meia-noite no horário local:
echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))
Esse cálculo simples não funcionará para fusos horários que não sejam deslocados do UTC por horas inteiras (por exemplo, Índia, TZ = Ásia / Calcutá), pois o "+5: 30" produzido por date +%-:::z
produzirá um erro "caractere inválido na expressão" quando usado na declaração acima.
$()
é preferível aos reticulares, por questões de legibilidade e outras razões .echo $(( $(date ...) / 86400 ))