Вы можете увидеть проблему, включив трассировку оболочки:
+ 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