I can get around it by creating a blank table, appending it to this table and then using a rule to update blanks with today() and the formatting is correct.
I notice that the date calculated for future dates is still incorrect - I guess I'll need to convert the number dates into actual numbers and then convert back again?