Bagaimana saya mendapatkan tanggal akhir bulan sebelumnya, berdasarkan tanggal pemrosesan?
Contoh:
- Tanggal pemrosesan = 15jan2015
- Tanggal yang diharapkan = 31dec2014,
- Tanggal pemrosesan = 10feb2015
- Tanggal yang diharapkan = 31jan2015
Bagaimana saya mendapatkan tanggal akhir bulan sebelumnya, berdasarkan tanggal pemrosesan?
Contoh:
Jawaban:
Dengan GNU date
:
$ date +%d%b%Y
16Aug2015
$ date -d "$(date +%Y-%m-01) -1 day" +%d%b%Y
31Jul2015
Beberapa shell memiliki dukungan bawaan untuk manipulasi tanggal:
Dengan ksh93
:
$ printf "%(%d%b%Y)T\n" "1st day, yesterday"
31Jul2015
Dengan zsh
:
$ zmodload zsh/datetime
$ strftime -s d %Y-%m-01-12 $EPOCHSECONDS
$ strftime -rs d %Y-%m-%d-%H $d
$ strftime %d%b%Y $((d-86400))
31Jul2015
Ada banyak cara untuk melakukan ini; di sini adalah yang paling sederhana yang saya temukan (di sini dengan asumsi GNU date
):
$ date -d "-$(date +%d) days"
Fri Jul 31 16:07:23 EDT 2015
TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '1 day ago'
. Anda mendapatkan kesalahan karena tidak ada 2011-12-30 di sana. Artinya, hari offset dilakukan pada waktu kalender. 2011-12-31 dikurangi 31 hari memberi Anda 2011-11-30 karena mengambil 31 dari 31. Tidak mengambil 31 * 24 * 60 * 60 * 60 detik dari waktu saat ini. Bandingkan dengan TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '24 hour ago'
yang memberi Anda tanggal 29, yaitu, kali ini, tanggal 24 * 60 * 60 * 60 detik yang lalu.
Berikut adalah versi yang berfungsi di Mac OS, yang menggunakan date
utilitas BSD :
date -v1d -v-1d +%d%b%Y
Argumen diterapkan secara berurutan. Anda dapat membayangkan bahwa suatu kencan disalurkan dari satu argumen ke argumen berikutnya. Sebagai contoh:
date
) -> 2017-03-06-v1d
) -> 2017-03-01-v-1d)
-> 2017-02-28+%d%b%Y
) -> 28Feb2017Anda dapat mencapai jumlah bulan maju atau mundur menggunakan date -v-1m -v1d -v-1d
, menggantikan -1m
dengan jumlah bulan mundur atau maju ( +1m
) yang Anda inginkan.
Itulah jawaban umum. Pertanyaan ini secara khusus menanyakan tentang tanggal relatif terhadap tanggal mulai. Utilitas tanggal Mac OS / BSD tidak memungkinkan Anda menyediakan datestamp untuk memulai, tetapi Anda dapat mengatur setiap elemen tanggal secara individual:
date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y
-> 31Dec2014
Coba gunakan kode ini
date -d "-$(date +%d) days month" +%Y-%m-%d