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