mes fecha crear con comando cambiar cal archivo anterior linux bash unix date

linux - fecha - Usando el comando `date` para obtener el mes anterior, actual y siguiente



date dia anterior linux (3)

Estoy usando debajo para obtener el anterior, el actual y el mes siguiente en Ubuntu 11.04:

LAST_MONTH=`date +''%m'' -d ''last month''` NEXT_MONTH=`date +''%m'' -d ''next month''` THIS_MONTH=`date +''%m'' -d ''now''`

Funciona bien hasta hoy, el último día de octubre de 2012 (2012-10-31)

Obtengo el resultado por debajo de ahora:

$ date Wed Oct 31 15:35:26 PDT 2012 $ date +''%m'' -d ''last month'' 10 $ date +''%m'' -d ''now'' 10 $ $ date +''%m'' -d ''next month'' 12

Supongo que las salidas deberían ser 9 , 10 , 11 respectivamente.

No entiendo por qué las salidas de date comportan así. ¿Cuál debería ser una buena manera de obtener el previous , el current y el mes next ?


El problema es que la date toma su solicitud literalmente y trata de usar una fecha del 31 de septiembre (siendo el 31 de octubre menos un mes) y luego porque eso no existe pasa al día siguiente, lo cual sucede. La documentación de date (a partir de la info date ) tiene los siguientes consejos:

La fuzz en las unidades puede causar problemas con los elementos relativos. Por ejemplo, `2003-07-31 -1 month ''podría evaluar a 2003-07-01, porque 2003-06-31 es una fecha no válida. Para determinar el mes anterior de manera más confiable, puede solicitar el mes anterior al día 15 del mes actual. Por ejemplo:

$ 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!


el problema principal ocurre cuando no tiene la fecha - opción de fecha disponible y no tiene permiso para instalarlo, intente a continuación -

Previous month #cal -3|awk ''NR==1{print toupper(substr($1,1,3))"-"$2}'' DEC-2016 Current month #cal -3|awk ''NR==1{print toupper(substr($3,1,3))"-"$4}'' JAN-2017 Next month #cal -3|awk ''NR==1{print toupper(substr($5,1,3))"-"$6}'' FEB-2017


Si usa la fecha en un entorno MacOS, intente esto:

ST1:~ ejf$ date Mon Feb 20 21:55:48 CST 2017 ST1:~ ejf$ date -v-1m +%m 01 ST1:~ ejf$ date -v+1m +%m 03

Además, prefiero calcular el mes anterior y el siguiente el primer día de cada mes, de esta manera no tendrá problemas con los meses que terminan el 30/31 o 28/29 (año bisiesto de febrero / febrero)