javascript时区转换器

时间:2012-03-02 19:56:55

标签: javascript timezone

我需要一种方法将未来的时间转换为不同的时区,而不依赖于用户的计算机时间。

在注册时,用户提供他的时区。当他登录时,我计算UTC时间和他的时间之间的分钟偏移量,并将该偏移量注入页面,以便javascript函数可以进行转换。像这样:

var TheUTCTime = new Date(UserTime.getTime() - TimeZoneOffsetInMinutes * 60000);

和其他方式相似:

var TheUserTime = new Date(UTCTime.getTime() + TimeZoneOffsetInMinutes * 60000);

只要偏移量不变,这就可以很好地转换时间。例如,由于夏令时,在美国东部时间和UTC之间,根据一年中的月份,相差300分钟或360分钟。

我的功能很好地转换今天的日期,但我想要的东西可以1)在一年中的任何一天做同样的事情,2)不依赖于用户的内部时钟或时区。

我怎么能这样做?

感谢。

2 个答案:

答案 0 :(得分:1)

  

我的功能很好地转换今天的日期,但我想要的东西可以1)在一年中的任何一天做同样的事情,2)不依赖于用户的内部时钟或时区。

如果您想将另一个UTC时间转换为用户的当地时间,则 知道他们的时区。这几乎是时区的定义:UTC与本地时间之间的映射(或等效地,UTC与本地时间之间的偏移)。

正如您所见,获取当前偏移是不够的,因为夏令时转换(以及对时区的任何其他更改 - 它们的变化比您预期的要多)。

基本上没有办法解决这个问题:你将 向用户询问他们的时区。您可以根据UTC的当前偏移量进行良好的 guess ,并可能对其IP地址进行地理编码,但您必须与它们进行确认。 (例如,他们可能正在旅行或某事,而不是在他们的“家”时区。)

答案 1 :(得分:0)

为了不依赖于用户的时钟时区,我认为最好的方法是在server side进行转换。

SO中有一个很好的问题,涵盖了夏令时和javascript日期对象:Daylight saving time and time zone best practices