Ok, então eu fiz algumas pesquisas e está interpretando o primeiro número como o ano, parece que o +
e totalmente superficial e completamente ignorado.
Usando seus exemplos.
$ date -d'1 February'
Sun Feb 1 00:00:00 CET 2015
Funciona totalmente como esperado, pois nenhum ano é fornecido.
$ date -d '1 February + 1 week'
Thu Feb 8 00:00:00 LMT 0001
Quase parece certo, mas você notará que o ano mudou para 0001
, pois o +
é ignorado e, portanto, o comando é visto como
{1 February 1} {+ 1}{week}
date
O {+1} parece ser padrão por qualquer período após a data.
Outro exemplo que parece funcionar, mas não funciona
$ date -d '1 February + 1 minute + 25 day + 7 week' # works since 1st parameter is 1!
Mon Apr 16 00:01:00 LMT 0001
Como você pode ver, o ano foi incrementado para 0001. Os minutos foram referenciados para incrementar pelo padrão 1, e então todos os outros comandos não fazem parte da data, portanto, são incrementados de acordo.
Como prova adicional de que ele funcione dessa maneira, siga este exemplo que funciona
$date -d '1 February 4 5 weeks'
Sun Mar 7 00:00:00 LMT 0004
e funciona da mesma forma que
$date -d '1 February + 4 + 5 weeks'
Sun Mar 7 00:00:00 LMT 0004
O que significa que os + são ignorados e o primeiro número depois deles é visto como o ano se o ano não for especificado anteriormente.
Obviamente, se você quiser subtrair, isso deve ser explicitamente declarado, embora ainda seja ignorado se o ano não tiver sido especificado para o primeiro número.
$date -d '1 February -4 weeks'
Sun Feb 8 00:00:00 LMT 0004
^
Year incremented by 4.
Embora se você usá-lo em um formato especificado na página man ou seja
$date -d ' Feb 2 -4 weeks'
Mon Jan 5 00:00:00 GMT 2015
Em seguida, ele funcionará inteiramente como pretendido, sem necessidade de nenhum ano:)