Вы можете увидеть проблему, включив трассировку оболочки:
+ 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
больше возможностей для определения даты / времени для отображения.
Я сам нашел решение:)
Теперь все работает нормально.