Para começar, o seu carimbo de tempo está em segundos desde 1 de janeiro de 1970. 00:00:00 UTC é minha suposição, se não for, converta-o para isso.
Então, você tem que subtrair os segundos para os dias que você quiser.
stamp=1525192000
day=$((60*60*24))
echo $(($stamp - 30*$day))
Em seguida, você recebe um tempo de volta Unix, se isso precisar de conversão para data e hora do dia, talvez seja necessário considerar o horário de verão, e é aí que você pode precisar usar o utilitário date
.
Note que você também pode usar date
. Isso permite que você trabalhe com outros elementos de data facilmente, sem precisar de cálculos:
Com o GNU date
:
date --date="$(date --iso-8601=s -d @1525192000) -30 days" +%s
Exemplo:
$ date --date="$(date --iso-8601=s -d @1525192000)"
Tue, May 1, 2018 7:06:01 PM
$ date --date="$(date --iso-8601=s -d @1525192000) -30 days"
Wed, Apr 1, 2018 7:06:01 PM
$ date --date="$(date --iso-8601=s -d @1525192000) -30 days" +%s
1523466380
$ date --date="$(date --iso-8601=s -d @1525192000) -30 days -1 week -3 months" +%s
1514309200
No FreeBSD e no macOS (o -j
significa não tentar definir a data do sistema, legal e seguro)
date -j -f "%a %b %d %T %Z %Y" "$(date -r 1234567890)" -v-30d "+%s"
EDIT: Obrigado, Kusalananda, OpenBSD e NetBSD não suportam -v
.