GNU/Linux >> Znalost Linux >  >> Linux

Pomocí příkazu `date` získáte předchozí, aktuální a následující měsíc

hlavní problém nastává, když nemáte k dispozici volbu date --date a nemáte oprávnění ji nainstalovat, zkuste to níže -

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

Problém je v tom, že date bere vaši žádost zcela doslovně a snaží se použít datum 31. září (je 31. října mínus jeden měsíc) a poté, protože neexistuje, přesune se na další den, což je. date dokumentaci (od info date ) má následující radu:

Neostrost v jednotkách může způsobit problémy s relativními položkami. Například „2003-07-31 -1 month“ může být vyhodnocen jako 2003-07-01, protože 2003-06-31 je neplatné datum. Chcete-li spolehlivěji určit předchozí měsíc, můžete požádat o měsíc před 15. dnem aktuálního měsíce. Například:

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

Pokud náhodou používáte datum v prostředí MacOS, zkuste toto:

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

Také bych raději vypočítal předchozí a následující měsíc první den každého měsíce, takže nebudete mít problémy s měsíci končícími 30/31 nebo 28/29 (únor/únor přestupný rok)


provede se následující:

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

nebo jak potřebujete:

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`

požádali jste o výstup jako 9,10,11, tak jsem použil %-m

%m (bez -) vytvoří výstup jako 09,... (počáteční nula)

to také funguje déle/méně než 12 měsíců:

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

prostě zkuste

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

zobrazíte úplný výsledek


Linux
  1. CentOS / RHEL :Jak získat datum a čas provedeného příkazu ve výstupu příkazu historie

  2. Pomocí historie bash získáte předchozí příkaz, zkopírujte jej a poté jej „spusťte“, ale s komentářem příkazu

  3. Bash - příkaz Datum a mezera

  1. Nastavte relativní čas pomocí příkazového řádku

  2. Jak přidám X dní k datu a získám nové datum?

  3. Získejte předchozí měsíc bez ohledu na dny

  1. Použití příkazu timedatectl ke změně času a data v systému RHEL7 Linux

  2. Příkaz k získání času v milisekundách

  3. Linux získá offset UTC od aktuálních (nebo jiných) časových pásem v dané datum a čas