Anda dapat melihat masalahnya dengan menyalakan jejak shell:
+ date -d 'Apr 1 2016 - 1 month' +%B
March
++ date -d 'Apr 1 2016'
+ date -d 'Fri Apr 1 00:00:00 EDT 2016 - 1 month' +%B
February
Ketika Anda menggunakan output dari date
perintah dalam , itu adalah di awal April, dan ketika mengurangi sebulan berjalan ke diskontinuitas karena perubahan EST / EDT:
+ date -d 'Fri Apr 1 00:00:00 EDT 2016 - 1 month'
Mon Feb 29 23:00:00 EST 2016
Hasil Anda, tentu saja, akan bervariasi sesuai dengan pengaturan zona waktu lokal Anda. Mengaktifkan jejak akan menampilkan zona waktu (dalam kasus saya, EDT
).
Alasan mengapa hasilnya berbeda adalah bahwa dalam kasus terakhir Anda telah memberikan lebih banyak informasi kepada date
, menjadikan parameternya lebih spesifik , yaitu waktu waktu tertentu. Pada bagian pertama, itu tidak ditentukan, memberikan date
lebih banyak kelonggaran tentang bagaimana menentukan tanggal / waktu untuk ditampilkan.
March