Obtenga el mes anterior independientemente de los días


4

En Linux, puedo obtener el mes pasado usando

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

o

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

Pero digamos, hoy es 31 de marzo, si ejecuto el comando en la parte superior, muestra 201603, pero quiero obtener el mes pasado independientemente del día en que me encuentre ahora; ¿como lo puedo hacer?

Puedo lograrlo usando una solución alternativa como obtener el primer día / último día del mes anterior, pero me pregunto si hay alguna forma elegante de hacerlo.

 date -d "-$(date +%d) days" '+%Y%m'     #get last day of previous month


Si esto es para el código de producción a escala, no olvide las falsedades que los programadores creen sobre el tiempo . Si es por tu guión personal, probablemente estés bien.
Comodín el

Respuestas:


9

La sabiduría habitual es usar el 15 de este mes. Luego reste 1 mes:

$ nowmonth=$(date +%Y-%m)
$ date -d "$nowmonth-15 last month" '+%Y%m'
201602

1

GNU dateno es particularmente adecuado para la aritmética como pretendes. Esa es una de las razones por las que escribí dateutils.

Su ejemplo se reduciría a:

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

Y hace lo correcto el 31 de marzo:

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

O lo que quieres decir con tu comentario (obteniendo el último día del mes anterior) independientemente de la fecha de hoy:

$ dateround --next today -31d
2016-03-31
$ dateround --next 2016-03-31 -31d
2016-02-29
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.