我需要一种方法将未来的时间转换为不同的时区,而不依赖于用户的计算机时间。
在注册时,用户提供他的时区。当他登录时,我计算UTC时间和他的时间之间的分钟偏移量,并将该偏移量注入页面,以便javascript函数可以进行转换。像这样:
var TheUTCTime = new Date(UserTime.getTime() - TimeZoneOffsetInMinutes * 60000);
和其他方式相似:
var TheUserTime = new Date(UTCTime.getTime() + TimeZoneOffsetInMinutes * 60000);
只要偏移量不变,这就可以很好地转换时间。例如,由于夏令时,在美国东部时间和UTC之间,根据一年中的月份,相差300分钟或360分钟。
我的功能很好地转换今天的日期,但我想要的东西可以1)在一年中的任何一天做同样的事情,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