如何在创建JavaScript日期时指定时区?

时间:2013-12-30 06:22:15

标签: javascript date datetime utc

我的倒计时时钟设定为2014年1月1日上午8点倒计时。

我使用以下代码设置日期:

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

这有效,但我想更进一步,并将其设置为特定的时区。在我的情况下UTC -7。

我已阅读this answer说明要使用:

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

但令我困惑的是我如何将时区设置为UTC -7,而我在线阅读的内容只会让我更加困惑。

有人可以解释Date.UTC的工作原理以及如何设置时区,以便我的倒计时时钟根据指定的时区倒计时?

注意:任何答案都必须是仅限客户端的代码。

1 个答案:

答案 0 :(得分:47)

  

有人可以解释Date.UTC如何运作

Date.UTC为所提供的年,月,日等创建时间值,没有任何偏移。因此,如果客户端计算机设置为UTC +05:00,那么:

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

将于2013年12月30日在格林威治创建相当于中午的日期。提醒日期将打印当地时间(假设+5:00),相当于2013-12-30T17:00:00 + 05:00。

  

如何设置时区让我的倒计时时钟根据指定的时区倒计时?

您无法设置时区,但您可以使用UTC值创建日期对象,调整偏移的小时和分钟,然后使用UTC方法获取倒计时的日期和时间组件。

e.g。

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方法,本地偏移将影响结果。