To expand on Carles' reply:
Carles' suggestion + Option (2) are the best variants, because they take into account user's locale settings.
Agree, (3) is a bad idea, it would be the last thing I recommend.
Having said that, there are some exceptions:
As a rule of thumb formatting date/time on the server side is almost always a bad idea. But if (and only if) you have a very clear idea about how it works (like your famous extension), then you can break the rules sometimes :)
As you said, if you have to format DateTime on ServerSide, which actually we are doing it (and it's not that strange on the use cases you pointed out - email, notifications,...-) you need an extension in order to format it correctly (my one :P) of course knowing before the right Timezone for the User or for the Thing...
Thanks for using our Community! I wanted to follow up with you on your post: https://community.ptc.com/t5/ThingWorx-Developers/Format-datetime-for-expression-widget/m-p/620719#M...
Did either Constantine or Carles's replies answer your question? If so, it would be great if you could mark the appropriate reply as the Accepted Solution for the benefit of other Community members who may have the same question.
If not, please respond to the thread and let us know your current status so that we can support further.