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