GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan perintah `date` untuk mendapatkan bulan sebelumnya, saat ini, dan berikutnya

masalah utama terjadi ketika Anda tidak memiliki opsi date --date dan Anda tidak memiliki izin untuk menginstalnya, lalu coba di bawah -

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

Masalahnya adalah date menerima permintaan Anda secara harfiah dan mencoba menggunakan tanggal 31 September (menjadi 31 Oktober dikurangi satu bulan) dan kemudian karena itu tidak ada, tanggal itu dipindahkan ke hari berikutnya. date dokumentasi (dari info date ) memiliki saran berikut:

Fuzz dalam unit dapat menyebabkan masalah dengan item relatif. Misalnya, `2003-07-31 -1 month' mungkin dievaluasi menjadi 01-07-2003, karena 31-06-2003 adalah tanggal yang tidak valid. Untuk menentukan bulan sebelumnya dengan lebih pasti, Anda bisa menanyakan bulan sebelum tanggal 15 bulan berjalan. Misalnya:

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

Jika Anda kebetulan menggunakan tanggal di lingkungan MacOS, coba ini:

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

Selain itu, saya lebih suka menghitung bulan sebelumnya dan berikutnya pada hari pertama setiap bulan, dengan cara ini Anda tidak akan mengalami masalah dengan bulan yang berakhir pada tanggal 30/31 atau 28/29 (tahun kabisat Feb/Feb)


berikut ini akan dilakukan:

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

atau sesuai kebutuhan Anda:

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`

Anda meminta output seperti 9,10,11, jadi saya menggunakan %-m

%m (tanpa -) akan menghasilkan keluaran seperti 09,... (nol di depan)

ini juga berfungsi selama lebih/kurang dari 12 bulan:

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

coba saja

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

untuk melihat hasil selengkapnya


Linux
  1. CentOS / RHEL :Cara mendapatkan tanggal dan waktu perintah yang dieksekusi di output perintah history

  2. Menggunakan riwayat bash untuk mendapatkan perintah sebelumnya, salin dan kemudian 'jalankan' tetapi dengan perintah yang dikomentari

  3. Perintah untuk mendapatkan waktu dalam milidetik

  1. Bagaimana saya bisa mendapatkan tanggal dan waktu saat ini di terminal dan mengatur perintah khusus di terminal untuk itu?

  2. Dapatkan waktu saat ini dalam jam dan menit

  3. Tetapkan waktu relatif menggunakan baris perintah

  1. Menggunakan perintah timedatectl untuk mengubah waktu dan tanggal pada sistem Linux RHEL7

  2. Bash - Perintah tanggal dan spasi

  3. Bagaimana cara menambahkan X hari ke tanggal dan mendapatkan tanggal baru?