Я не верю, что это возможно - нет возможности установить часовой пояс для объекта Date после его создания.
И в некотором смысле это имеет смысл - концептуально (если, возможно, не в реализации); за http://en.wikipedia.org/wiki/Unix_timestamp (выделено мое):
Время Unix, или время POSIX, представляет собой систему для описания моментов во времени, определяемых как количество секунд, прошедших с полуночи Всемирное координированное время (UTC) от четверга, 1 января 1970 года.
Как только вы его построите, он будет представлять определенную точку в «реальном» времени. Часовой пояс имеет значение только тогда, когда вы хотите преобразовать этот абстрактный момент времени в удобочитаемую строку.
Таким образом, имеет смысл, что вы сможете изменить только фактическое время, которое Date представляет в конструкторе. К сожалению, кажется, что нет никакого способа передать в явном часовом поясе - и конструктор, который вы вызываете (возможно, правильно), переводит ваши «локальные» переменные времени в GMT, когда он канонически сохраняет их - поэтому нет способа использовать int, int, int
конструктор для времени по Гринвичу.
С другой стороны, тривиально просто использовать конструктор, который принимает строку. Вам даже не нужно конвертировать числовой месяц в строку (по крайней мере, в Firefox), поэтому я надеялся, что наивная реализация сработает. Тем не менее, после его тестирования он успешно работает в Firefox, Chrome и Opera, но не работает в Konqueror («Неверная дата»), Safari («Неверная дата») и IE («NaN»). Я полагаю, у вас просто есть массив поиска для преобразования месяца в строку, например:
var months = [ '', 'January', 'February', ..., 'December'];
function createGMTDate(xiYear, xiMonth, xiDate) {
return new Date(months[xiMonth] + ' ' + xiDate + ', ' + xiYear + ' 00:00:00 GMT');
}