- 1 month
subtrairá um do número do mês e, em seguida, se a data resultante não for válida ( February 30
, por exemplo), ajuste-o para que seja válido. Portanto, December 31 - 1 month
é December 1
, não um dia em novembro e March 31 - 1 month
é March 3
(a menos que seja executado em um ano bissexto).
Veja a frase da página de informações Gnu date
(que é a versão date
que implementa esta sintaxe), que inclui uma boa sugestão para tornar a aritmética mais robusta:
The fuzz in units can cause problems with relative items. For example,
2003-07-31 -1 month
might evaluate to 2003-07-01, because 2003-06-31 is an invalid date. To determine the previous month more reliably, you can ask for the month before the 15th of the current month. For example:
$ date -R
Thu, 31 Jul 2003 13:02:39 -0700
$ date --date='-1 month' +'Last month was %B?'
Last month was July?
$ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
Last month was June!
Outro aviso, também citado na página de informações:
Also, take care when manipulating dates around clock changes such as daylight saving leaps. In a few cases these have added or subtracted as much as 24 hours from the clock, so it is often wise to adopt universal time by setting the
TZ
environment variable toUTC0
before embarking on calendrical calculations.