O GNU date faz o possível para analisar sua entrada, mas alguns formatos são inerentemente ambíguos.
O BSD date permite (ou praticamente requer) que você especifique um formato de entrada com -f e depois simplesmente analisa sua entrada de acordo com isso, emitindo um erro se a entrada não corresponder ao formato.
Esperar ou exigir ferramentas padrão para suportar um formato de data ilógico e aleatório como o seu parece mal direcionado, de qualquer maneira. As ferramentas padrão devem suportar formatos padrão, e acho que você vai achar que, no longo prazo, faz sentido que seus scripts e programas usem um formato de computador interno. Para fazer interface com humanos com comportamentos estranhos, é fácil escrever uma função simples de invólucro de shell como
Wackydate () {
local day # local is a Bashism
local mon
local year
year=${1%????}
mon=${1#$year??}
day=${1#$year}
day=${day%$mon}
shift
date -d "$year$mon$day" "$@"
}
As substituições de parâmetro do shell ${variable#prefix} e ${variable%suffix} retornam o valor de variable com qualquer correspondência de caractere curinga na expressão após # ou % removidas no início ou no final, respectivamente.