GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation de la commande `date` pour obtenir le mois précédent, actuel et suivant

le problème principal se produit lorsque vous n'avez pas l'option date --date disponible et que vous n'avez pas la permission de l'installer, alors essayez ci-dessous -

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

Le problème est que date prend votre demande littéralement et essaie d'utiliser une date du 31 septembre (soit le 31 octobre moins un mois), puis parce que cela n'existe pas, il passe au jour suivant qui existe. Le date documentation (à partir de info date ) a le conseil suivant :

Le flou dans les unités peut causer des problèmes avec des éléments relatifs. Par exemple, `2003-07-31 -1 month' peut être évalué à 2003-07-01, car 2003-06-31 est une date invalide. Pour déterminer le mois précédent de manière plus fiable, vous pouvez demander le mois précédant le 15 du mois en cours. Par exemple :

 $ 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 vous utilisez la date dans un environnement MacOS, essayez ceci :

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

De plus, je préfère calculer le mois précédent et le mois suivant le premier jour de chaque mois, de cette façon vous n'aurez pas de problèmes avec les mois se terminant le 30/31 ou le 28/29 (fév/fév année bissextile)


ce qui suit fera l'affaire :

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

ou selon vos besoins :

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`

vous avez demandé une sortie comme 9,10,11, j'ai donc utilisé le %-m

%m (sans -) produira une sortie comme 09,... (zéro non significatif)

cela fonctionne aussi pendant plus/moins de 12 mois :

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

essayez juste

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

pour voir le résultat complet


Linux
  1. Utilisation de la commande timedatectl pour modifier l'heure et la date sur le système Linux RHEL7

  2. Commande pour obtenir le temps en millisecondes

  3. Comment puis-je obtenir la date et l'heure actuelles dans le terminal et définir une commande personnalisée dans le terminal pour cela ?

  4. Bash - Commande de date et espace

  5. Linux obtient le décalage UTC des fuseaux horaires actuels (ou autres) à une date et une heure données

Corrigez facilement une faute de frappe de la commande précédente à l'aide du symbole Carat (^)

Apprenez à connaître votre système (en utilisant la ligne de commande)

Comment obtenir la date et l'heure actuelles en JavaScript

Trucs et astuces pour utiliser la commande wget Linux

Comment cloner et restaurer une partition Linux à l'aide de la commande dd

Comment utiliser la commande DD et comment graver ISO en l'utilisant