UTC date in javascript, php, mysql and sqlite

It can be very challenging to work with dates and times across different timezones. In this post I explain some of the things I do to make this work. I focus on Javascript, PHP, MySQL and SQLite development.


The most important action first - put the connection session in UTC mode:

set time_zone = '+00:00';

After this is done, both NOW() and UTC_TIMESTAMP() return the same value. The FROM_UNIXTIME() call returns UTC instead of local datetime and UNIX_TIMESTAMP() returns the seconds since 1970-01-01 UTC (called Unix epoch).


To set the default timezone:


To get a DateTime object from a Unix timestamp:

$date = new DateTime('@' . $seconds);

In the above constructor, the Unix timestamp is always interpreted as UTC time, even if you specify a timezone as the second argument.

To get back some nice format:

echo $date->format('Y-m-d H:i:s');


SQLite is by default in UTC. So both datetime('now') and datetime([seconds], 'unixepoch') return a UTC datetime.


To get the milliseconds since Unix epoch:



var date = new Date();

Both methods return milliseconds and not seconds!

When you use the constructor that accepts milliseconds, it is always interpreted as UTC time:

var date = new Date(ts);

When you call the constructor that accepts year, month, etc. it is always interpreted as local time:

var date = new Date(2014, 9, 8, 14, 30, 0);

If you want to convert some UTC datetime to a Date object, you can use the Date.UTC() method:

var date = new Date(Date.UTC(2014, 9, 8, 14, 30, 0));
Tag: , , , | Category: