Il mese scorso

Mi sono accorto di un piccolo sminchio nello script che lancia analog.
Per calcolare il nome del mese passato usavo ‘1 month ago’ come parametro a “date”, ma lanciato oggi mi da’ come risultato marzo:

fabio@gnu:~$ date --date='1 month ago' +'%Y%m'
200403

Dopo un primo momento di panico mi sono reso conto di dove fosse il problema… marzo ha 31 giorni, febbraio no… il 31 febbraio non esiste… Il problema è che viene contato come marzo!

Cmq, ho trovato la spiegazione in ‘info date’:

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!