javascript时区转换器

javascript timezone converter

本文关键字:转换器 时区 javascript      更新时间:2023-09-26

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

在注册时,用户提供自己的时区。当他登录时,我计算UTC时间和他的时间之间的偏移量(以分钟为单位),并将该偏移量注入页面,以便javascript函数可以进行转换。类似这样的东西:

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

另一种方式是这样的:

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

只要偏移量不变,就可以很好地转换时间。例如,由于夏令时,美国东部时间和UTC之间的时间间隔为300分钟或360分钟,具体取决于一年中的月份。

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

我怎么能这么做?

谢谢。

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

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

正如您所看到的,仅仅获得当前偏移量是不够的,因为夏令时转换(以及时区的任何其他变化——它们的变化比您预期的要大)。

基本上没有办法绕过这一点:必须询问用户的时区。您可以根据UTC的当前偏移量,并可能对其IP地址进行地理编码,做出一个很好的猜测,但您必须与他们确认。(例如,他们可能正在旅行或其他什么,而不在"家"时区。)

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

SO中有一个很好的问题,涉及夏令时和javascript日期对象:夏令时和时区最佳实践