- use numeric formats, YYYY-MM-DD is the best international date format
- use a readable format if internalization is not a problem
- use the (HTML5)
<time> tag, if possible
- try to avoid using a date to pass complicated information
The best way to shoot yourself in the foot is to write it 01/02/03 which can be quite a number of things: 1st of February 2003 (European style), 2nd of January 2003 (USA style), or 3rd of February 2001. Formats like 01/02/2003 solve part of the problem but not all of it (see difference in US and EU style).
You then have the internationalization problems, something like the month August can't be safely contracted to Aug and expect people from non-english countries to understand; meaning writing something like 01 Aug, 2003. See wikipedia list of names for August for some clarification. Using numbers instead of names you avoid this problem; however that invites the problem above of ambiguity between month and day and year.
If you're aiming to please everybody the best alternative is to use the ISO standard which is YYYY-MM-DD typically (I recommend avoiding the exotic variants of the standard). If nothing else at least you're using something that's an international standard, for your international audience; the date is also hard to mistake, albeit not foolproof.
If internalization is not a problem (ie. you are aiming for a specific language; writing a email, article, etc) then simply write the readable version: 5th of December 2011, or just simply 5th of December, if the year is the current one. This makes sense because you want to have a consistent style, and you also want to have easy to read inline dates: "The meeting is on the 5th of December. I'll be there on the 4th. Afterwards we should plan for the follow up on the 10th of January 2012." The fewer date formats you use the easier it is for the user/reader.
If you're using HTML you can also make use of the
"The conference is on the <time datetime="2011-12-05">5th of December</time>"
There are also several cases where a date is not so user friendly as an alternative approach. One of the most common cases is the use of dates to refer to something like the start of a contest or the end of a contest. There's no need to force the burden of running though conversions in time, timezone and daylight savings nonsense for your user to know this. Worse still, this typically involves the users leaving your site and going to some date conversion site.
What you should be doing (in the case of the example) is provide a date along with a counter. Preferably your own, but using a simple counter service on the web works just as well. Having a counter simplifies the users life, because telling someone a event is X days from now makes it much easier for them to convert to a date in their head.
So, always consider if you can avoid using (only) a date, and what information the users are suppose to get from the date.