GNU/Linux >> Tutoriales Linux >  >> Linux

Usando el comando `fecha` para obtener el mes anterior, actual y el próximo

el problema principal ocurre cuando no tiene la opción de fecha --fecha disponible y no tiene permiso para instalarla, luego 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

El problema es que date toma su solicitud literalmente e intenta usar una fecha del 31 de septiembre (siendo el 31 de octubre menos un mes) y luego, debido a que no existe, se mueve al día siguiente que sí existe. El date documentación (de info date ) tiene el siguiente consejo:

La borrosidad en las unidades puede causar problemas con elementos relativos. Por ejemplo, '2003-07-31 -1 mes' podría evaluarse como 2003-07-01, porque 2003-06-31 no es una fecha 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!

Si está utilizando 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ás problemas con los meses que terminan el 30/31 o el 28/29 (año bisiesto de febrero/febrero)


lo siguiente hará:

date -d "$(date +%Y-%m-1) -1 month" +%-m
date -d "$(date +%Y-%m-1) 0 month" +%-m
date -d "$(date +%Y-%m-1) 1 month" +%-m

o como necesites:

LAST_MONTH=`date -d "$(date +%Y-%m-1) -1 month" +%-m`
NEXT_MONTH=`date -d "$(date +%Y-%m-1) 1 month" +%-m`
THIS_MONTH=`date -d "$(date +%Y-%m-1) 0 month" +%-m`

pediste una salida como 9,10,11, así que usé el %-m

%m (sin -) producirá una salida como 09,... (cero inicial)

esto también funciona por más/menos de 12 meses:

date -d "$(date +%Y-%m-1) -13 month" +%-m

solo inténtalo

date -d "$(date +%Y-%m-1) -13 month"

para ver el resultado completo


Linux
  1. CentOS/RHEL:cómo obtener la fecha y la hora del comando ejecutado en la salida del comando del historial

  2. Comando para obtener el tiempo en milisegundos

  3. Obtener la hora actual en horas y minutos

  4. Establecer el tiempo relativo usando la línea de comando

  5. ¿Cómo agrego X días a la fecha y obtengo una nueva fecha?

Corrija fácilmente un error tipográfico del comando anterior usando el símbolo Carat (^)

Conozca su Sistema (usando la línea de comando)

Cómo obtener la fecha y hora actuales en JavaScript

Consejos y trucos para usar el comando wget Linux

Cómo clonar y restaurar una partición de Linux usando el comando dd

Cómo usar el comando DD y cómo grabar ISO usándolo