Well, that's because 0000-00-00 isnt a valid date string, so the parsing gets a little off.
If you're storing the date in that format, then what do you expect the year, month and day to be?
You probably should just check for that special value and skip the formatting for it.
If it isnt that value, then by all means run your date formatting.