Подтвердить что ты не робот

Как указать часовой пояс при создании даты JavaScript?

У меня есть обратный отсчет, который установлен на обратный отсчет до 8 утра 1 января 2014 года.

Я использую следующий код для установки даты:

var futureDate = new Date(2014, 0, 1, 8, 0, 0, 0);

Это работает, но я хотел бы сделать еще один шаг и установить его в определенный часовой пояс. В моем случае UTC -7.

Я прочитал этот ответ, в котором говорится:

new Date(Date.UTC(year, month, day, hour, minute, second))

но я смущен, так как я устанавливаю часовой пояс как UTC -7, и то, что я читаю в Интернете, только меня смущает.

Может ли кто-нибудь объяснить, как работает Date.UTC и как установить часовой пояс, чтобы часы обратного отсчета отсчитывались в зависимости от указанного часового пояса?

Примечание. Любой ответ должен быть только на стороне клиента.

4b9b3361

Ответ 1

Может кто-нибудь объяснить, как работает Date.UTC

Date.UTC создает временное значение для предоставленного года, месяца, даты и т.д. без какого-либо смещения. Поэтому, если для клиентской машины задано, скажем, UTC +05: 00, то:

var d = new Date(Date.UTC(2013, 11, 30, 12, 0, 0));

создаст дату, эквивалентную полудню 30 декабря 2013 года в Гринвиче. Предупреждение о дате будет печатать местное время (при условии +5: 00), эквивалентное 2013-12-30T17: 00: 00 + 05: 00.

и как установить часовой пояс, чтобы часы обратного отсчета отсчитывались в зависимости от указанного часового пояса?

Вы не можете установить часовой пояс, однако вы можете использовать значения UTC для создания объекта даты, отрегулировать часы и минуты для смещения, а затем использовать методы UTC для получения компонентов даты и времени для обратного отсчета.

например.

function z(n){return (n < 10? '0' : '') + n;}

var d = new Date(Date.UTC(2012, 11, 30, 12, 0, 0));

d.setUTCHours(d.getUTCHours() - 7);

alert(d.getUTCFullYear() + '-' + z(d.getUTCMonth() + 1) + '-' + 
      z(d.getUTCDate()) + 'T' + z(d.getUTCHours()) + ':' +
      z(d.getUTCMinutes()) + ':' + z(d.getUTCSeconds()) + '-07:00'
);

// 2012-12-30T05:00:00-07:00

Если используются не-UTC-методы, локальное смещение влияет на результат.