Bạn có thể thấy vấn đề bằng cách bật dấu vết vỏ:
+ 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
Khi bạn sử dụng đầu ra của date
lệnh bên trong , đó là vào đầu tháng Tư và khi trừ đi một tháng sẽ xảy ra sự gián đoạn do thay đổi EST / EDT:
+ date -d 'Fri Apr 1 00:00:00 EDT 2016 - 1 month'
Mon Feb 29 23:00:00 EST 2016
Tất nhiên, kết quả của bạn sẽ thay đổi tùy theo cài đặt múi giờ địa phương của bạn. Bật theo dõi sẽ hiển thị múi giờ (trong trường hợp của tôi, EDT
).
Lý do tại sao các kết quả khác nhau là trong trường hợp sau, bạn đã cung cấp thêm thông tin date
, làm cho tham số của nó cụ thể hơn , tức là thời gian cụ thể trong ngày. Trong phần đầu tiên, điều đó không được chỉ định, đưa ra date
nhiều thời gian hơn về cách xác định ngày / giờ để hiển thị.
March