Скорее всего да, часовые пояса, разница всего в один час.
MySQL работает в часовом поясе сервера, а JS в часовом поясе браузера, то есть клиентского компьютера.
Видимо, сервер работает в GMT+0400
А вам это нужно? JS отдает вам время в том часовом поясе, в котором системное время вашего компьютера, тем-то Unix timestamp и хорош, что сам по себе не зависит от локали, и адаптируется при конвертации в удобочитаемый вид.
У вас какая задача на счёт времени? Для чего храните, и в каком формате?
Тогда вижу 3 варианта:
1) если смещение часового пояса фиксированное — можете приплюсовать количество миллисекунд в сутках к timestamp
2) изначально хранить время в виде строки
3) перевести сервер в UTC и использовать date.toUTCString()
var date = new Date(1342382400*1000);
var date_utc = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
но в строке date_utc будет отображаться не верный пояс (останется GMT+0300)
date: Sun Jul 15 2012 23:00:00 GMT+0300
date_utc: Sun Jul 15 2012 20:00:00 GMT+0300