คุณสามารถเห็นปัญหาโดยการเปิดเปลือกติดตาม:
+ 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
เมื่อคุณใช้เอาต์พุตของdate
คำสั่งด้านในคำสั่งนั้นจะอยู่ที่จุดเริ่มต้นของเดือนเมษายนและเมื่อการลบเดือนทำงานเข้าสู่ความไม่ต่อเนื่องเนื่องจากการเปลี่ยนแปลง EST / EDT:
+ date -d 'Fri Apr 1 00:00:00 EDT 2016 - 1 month'
Mon Feb 29 23:00:00 EST 2016
แน่นอนผลลัพธ์ของคุณจะแตกต่างกันไปตามการตั้งค่าเขตเวลาท้องถิ่นของคุณ การเปิดการติดตามจะแสดงเขตเวลา (ในกรณีของฉันEDT
)
เหตุผลที่ผลลัพธ์แตกต่างกันคือในกรณีหลังคุณให้ข้อมูลเพิ่มเติมdate
ทำให้พารามิเตอร์เฉพาะเจาะจงมากขึ้นนั่นคือเวลาเฉพาะของวัน ในส่วนแรกที่ไม่ได้ระบุdate
เพิ่มระยะเวลาเพิ่มเติมเกี่ยวกับวิธีการกำหนดวันที่ / เวลาที่จะแสดง
March