当然,有lot questions Date
objects timezones和{{3}}但其中很多都是关于转换当前< / em>到另一个时区的时间,其他时间并不是很清楚他们想要做什么。
我想在任意时间,任意一天显示日,小时,分钟等。例如,我想要一个函数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"
,也会始终采用这种方式。
总是会这样,让我们说2014/02/05 19:32,或2002/08/04 07:12;以及
作为最终限制,不会从服务器端请求任何内容(因为我自己差不多自己做:) :)
甚至可能吗?
答案 0 :(得分:1)
给出时间戳1357041600(即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这样的库可以用来确定偏移量,但是我没有使用它们所以没有暗示认可。
答案 1 :(得分:1)
对于支持ECMAScript Internationalization API的JavaScript运行时环境,并遵循其支持IANA time zone database的建议,您只需执行以下操作:
new Date(1357041600000).toLocaleString("en-US", {timeZone: "America/Los_Angeles"})
对于其他环境,需要库。 There are several listed here