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

创建JavaScript日期时如何指定时区?,javascript,date,datetime,utc,Javascript,Date,Datetime,Utc,我有一个倒计时钟,设置为2014年1月1日上午8点倒计时 我使用以下代码设置日期: 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的,而我在网上读到的内容只会让我更加

我有一个倒计时钟,设置为2014年1月1日上午8点倒计时

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

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
的工作原理吗?我如何设置时区,使我的倒计时时钟根据指定的时区倒计时

注意:任何答案必须是客户端代码

有人能解释Date.UTC是如何工作的吗

为提供的年、月、日期等创建时间值,不带任何偏移。因此,如果客户机设置为UTC+05:00,则:

var d = new Date(Date.UTC(2013, 11, 30, 12, 0, 0));
将在格林威治创建一个相当于2013年12月30日中午的日期。通知日期将打印一个相当于2013-12-30T17:00:00+05:00的本地时间(假设+5:00)

如何设置时区,使我的倒计时时钟根据指定的时区倒计时

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

e、 g

函数z(n){返回(n<10?'0':'')+n;}
var d=新日期(UTC日期(2012、11、30、12、0、0));
d、 setUTCHours(d.getUTCHours()-7);
警报(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方法,本地偏移量将影响结果。

Javascript日期对象使用UTC。时区仅用于生成日期和时间部分的本地值。虽然无法设置偏移量,但可以使用UTC函数手动生成特定偏移量的时间值,并添加或减去所需的偏移量。UTC-7不是时区,而是时区偏移量。这是一个巨大的差异。请仔细阅读。此外,您可能需要读取。如果需要在与服务器同步的客户端中设置计时器,则需要使用服务器时间在本地客户端上设置日期引用,本地客户端将已经处于时区偏移的情况,并且如果他们遵守夏令时,这将已经被考虑在内。您需要了解一些有关客户端所在时区的信息,它们离GMT有多远,您的服务器离GMT有多远。。。设置时区偏移量并不像设置时区偏移量那么简单,因为很容易使问题复杂化而无法解决问题。Rob,在格式化ISO8601日期字符串时,不应在输出中包含字符“UTC”。我可能在这里遗漏了一些内容,但为什么
date.UTC(2013,11,30,12,0,0)
在12月?是不是应该在11月?@tykowale月的指数为零,所以0是1月,11是12月。:-)@RobG谢谢,这就是我所猜测的,但将年和日索引为1而将月索引为0似乎很奇怪。@tykowale天也索引为零,0是星期天,1是星期一,等等。小时、分钟和秒也是如此。;-)
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