当然,有一个 lot的 questions关于Date
objects和 timezones但他们中的许多人都是关于将当前时间转换为另一个时区,而其他人则不太清楚他们想做什么。
我想在任意一天的任意时区显示日期、小时、分钟等。例如,我想要一个函数 f(t, s)
:
给定时间戳 1357041600(即 2013/1/1 12:00:00 UTC)和字符串
"America/Los Angeles"
,将满足以下比较:f(1357041600, "America/Los Angeles") == "2013/01/01 04:00:00"
给定时间戳 1372680000 (2013/07/01 12:00:00 UTC),将满足以下比较:
f(1357041600, "America/Los Angeles") == "2013/07/01 05:00:00"
即使浏览器中的时区是
“Europe/London”
或“America/São Paulo”
,也会始终如此。即使浏览器中的时间是 2014/02/05 19:32 或 2002/08/04 07:12,也会始终如此;和
作为最后的限制,不会从服务器端请求任何东西(因为我几乎是自己做的:))
有可能吗?
最佳答案
given the timestamp 1357041600 (which is 2013/1/1 12:00:00 UTC)
这似乎是自 UNIX 纪元 (1970-01-01T00:00:00Z) 以来的秒数。 Javascript 使用相同的纪元,但以毫秒为单位,因此可以创建合适的日期对象:
var d = new Date(timestamp * 1000);
这将创建一个具有合适时间值的 Date 对象。然后您需要使用 IANA time zone database 之类的东西来确定时区偏移量.可以使用 UTC 方法将其应用于 Date 对象。例如。将偏移量解析为分钟,然后使用:
d.setUTCMinutes(d.getUTCMinutes() + offset)
然后可以使用 UTC 方法获取调整后的日期和时间值,以创建您需要的任何格式的字符串:
var dateString = d.getUTCFullYear() + '/' + pad(d.getUTCMonth() + 1) + '/' ...
其中 pad 是一个将前导零添加到单个数字值的函数。使用 UTC 方法可避免本地时区偏移和夏令时差异的任何影响。
还有像timezone.js这样的库可用于确定偏移量,但我没有使用它们,因此不暗示任何背书。
关于javascript - 在任意一天的任意时区获取日期的本地时间表示 - 考虑夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21590465/