Obtenha o mês anterior, independentemente dos dias

4

No Linux, posso conseguir no mês passado usando

date -d "last month" '+%Y%m'

ou

date -d "1 month ago" '+%Y%m'

Mas digamos, hoje é 31 de março, se eu executar o comando no topo, ele mostra 201603, mas eu quero obter o mês passado, independentemente do dia em que estou agora; como posso fazer isso?

Eu posso conseguir isso usando uma solução alternativa como obter o primeiro dia / último dia do mês anterior, mas eu me pergunto se existe alguma maneira elegante de fazer isso?

 date -d "-$(date +%d) days" '+%Y%m'     #get last day of previous month
    
por hades 31.03.2016 / 04:42

2 respostas

9

A sabedoria usual é usar o 15 deste mês. Então subtraia 1 mês:

$ nowmonth=$(date +%Y-%m)
$ date -d "$nowmonth-15 last month" '+%Y%m'
201602
    
por 31.03.2016 / 04:51
1

GNU date não é particularmente adequado para aritmética como você pretende. Essa é uma das razões pelas quais eu escrevi dateutils .

Seu exemplo se resumiria a:

$ dateadd today -1mo -f '%Y%m'
201603

E faz a coisa certa no dia 31 de março:

$ dateadd 2016-03-31 -1mo -f '%Y%m'
201602

Ou o que você insinua em seu comentário (recebendo o último dia do mês anterior), independentemente da data de hoje:

$ dateround --next today -31d
2016-03-31
$ dateround --next 2016-03-31 -31d
2016-02-29
    
por 20.04.2016 / 16:13

Tags