Você pode ver o problema ativando o rastreamento do shell:
+ 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
Quando você usa a saída do comando date
interno, é no início de abril e quando subtrair um mês é executado na descontinuidade devido à alteração EST / EDT:
+ date -d 'Fri Apr 1 00:00:00 EDT 2016 - 1 month'
Mon Feb 29 23:00:00 EST 2016
Seus resultados, obviamente, variam de acordo com as configurações locais de fuso horário. Ativar o rastreio mostrará o fuso horário (no meu caso, EDT
).
O motivo pelo qual os resultados diferem é que, no último caso, você forneceu mais informações para date
, tornou seu parâmetro mais específico , ou seja, a hora específica do dia. Na primeira parte, isso não foi especificado, dando a date
mais liberdade sobre como determinar a data / hora a ser exibida.