如果在两个不同的时区运行javascript的"(new Date()).getTime()"

48
如果同时从两个不同的时区运行JavaScript代码(new Date()).getTime(),你会得到相同的值吗?这个值会受到运行浏览器的机器上设置的系统时间的影响吗?
4个回答

52

是的,它受系统时间影响。但是,如果本地时间正确(无论计算机设置为哪个时区),在任何时区中都应该相同。

ECMAScript标准指出(§15.9.1.1):

"ECMAScript中的时间以自1970年1月1日UTC以来的毫秒数表示。"


28

代码:

var today = new Date();
console.log(today);
var t = today.getTime();
console.log(t);

我在英国的电脑:

Sat Sep 21 2013 03:45:20 GMT+0100 (GMT Daylight Time)
1379731520112 

我的VPS:

Sat, 21 Sep 2013 02:44:31 GMT
1379731471743

getTime值之间的差异为48,369毫秒(48秒),不是1小时的时区差异。


8

你不会得到相同的值 - 两个客户端浏览器选择他们的系统时间之间的差异,但是如果他们的时间设置正确,使用new Date()获取时间戳,你应该得到两个时间之间的最小差异,因为可以获取UTC值(new Date()返回自1970年1月1日以来经过的毫秒数,这不会改变),这是通用时间并且与位置无关。


2

在不同机器上获取到的时间很可能存在误差,但是(之前我说错了)JavaScript Date() 默认采用UTC时区。

通常情况下,在需要时间精确的场合,最好使用服务器时间,并在输出时进行时区修正。


这是不正确的。只要本地时间正确,时区就不重要。 - Matthew Flaschen
2
他在谈论不同的时区,除非有人选择将他的本地时间从他的时区偏移以与另一个时区对应,否则这些时区将具有不同的本地时间。 - BGerrissen
getTime并不返回本地时间。只要本地时间设置正确(针对计算机所在的任何时区),getTime返回的UTC时间也将是正确的。 - Matthew Flaschen
你有多确定它不会返回本地时间?我刚在w3schools中检查了它的值,其中使用了JavaScript中的非UTC日期时间,并返回了我的时区的时间,而不是UTC时区的时间。 - aj go

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接