// back-end: format for angular within the sql querySELECT DATE_FORMAT(my_datetime, "%Y-%m-%dT%TZ")...
// font-end Output the localised time\{\{item.my_datetime | date :'medium' }}
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+| TIMESTAMP | DATETIME |+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+| TIMESTAMP requires 4 bytes. | DATETIME requires 8 bytes. || Timestamp is the number of seconds that have elapsed since January 1, 1970 00:00 UTC. | DATETIME is a text displays 'YYYY-MM-DD HH:MM:SS' format. || TIMESTAMP supported range: ‘1970-01-01 00:00:01′ UTC to ‘2038-01-19 03:14:07′ UTC. | DATETIME supported range: ‘1000-01-01 00:00:00′ to ‘9999-12-31 23:59:59′ || TIMESTAMP during retrieval converted back to the current time zone. | DATETIME can not do this. || TIMESTAMP is used mostly for metadata i.e. row created/modified and audit purpose. | DATETIME is used mostly for user-data. |+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
you changed the country you stay in, and continue your work of maintaining the data while seeing it in a different timezone (without changing the actual data).
you accept data from different clients around the world, each of them inserts the time in his timezone.
In short
datetime = application supports 1 timezone (for both inserting and selecting)
timestamp = application supports any timezone (for both inserting and selecting)
This answer is only for putting some highlight on the flexibility and ease of timestamps when it comes to time zones , it is not covering any other differences like the column size or range or fraction.