¿Cómo obtengo la fecha de finalización del mes anterior, según la fecha de procesamiento?
Ejemplos:
- Fecha de procesamiento = 15jan2015
- Fecha esperada = 31dec2014,
- Fecha de procesamiento = 10feb2015
- Fecha esperada = 31jan2015
shell-script
usuario128856
fuente
fuente
TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '1 day ago'
. Recibe un error porque no había 2011-12-30 allí. Es decir, el desplazamiento del día se realizó en la hora del calendario. 31/12/2011 menos 31 días le da 30/11/2011 porque le quita 31 de 31. No le quita 31 * 24 * 60 * 60 * 60 segundos de la hora actual. Compare con loTZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '24 hour ago'
que le da el 29, es decir, esta vez, la fecha en que fue hace 24 * 60 * 60 * 60 segundos.Aquí hay una versión que funciona en Mac OS, que utiliza la
date
utilidad BSD :date -v1d -v-1d +%d%b%Y
Los argumentos se aplican en orden. Puede imaginarse que una fecha se canaliza de un argumento a otro. Por ejemplo:
date
) -> 2017-03-06-v1d
) -> 2017-03-01-v-1d)
-> 2017-02-28+%d%b%Y
Dar formato a la fecha ( ) -> 28 de febrero de 2017Puede alcanzar cualquier cantidad de meses hacia adelante o hacia atrás usando
date -v-1m -v1d -v-1d
, reemplazando-1m
con la cantidad de meses hacia atrás o hacia adelante (+1m
) que desee.Esa es la respuesta genérica. Esta pregunta específicamente pregunta sobre fechas relativas a una fecha de inicio. La utilidad de fecha Mac OS / BSD no le permite proporcionar un sello de fecha para comenzar, pero puede configurar cada elemento de fecha individualmente:
date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y
-> 31dic.2014fuente
Intenta usar este código
fuente