从特定时区获取当前时间戳

7
有没有一种简单的方式在 JavaScript 中从特定时区获取 Unix 时间戳?例如,我希望客户端向我发送一个 Unix 时间戳,但我想将其与我的时区匹配。

谢谢!

3个回答

4
为什么不直接发送UTC时间,然后在服务器上将其转换为您的时区?
var utcEpochSeconds = dateObj.getTime() + (dateObj.getTimezoneOffset() * 60000);

迄今为止最好的解决方案,因为本地机器不一定知道服务器的时区偏移量。仍然无法理解为什么没有 dateObj.getUTCTime() 方法。 - RobG
UTC始终不变,无论如何?(我对时区的东西一窍不通) - Toby
1
是的,除非您的时钟配置错误或者您以相对论速度旅行:http://en.wikipedia.org/wiki/Coordinated_Universal_Time。 - tjdett
但是如果我将本地结果与UTC时间进行比较,我会相差8个小时吗?!(我在洛杉矶时区) - Toby
是的,因为你在美国太平洋时间区,比协调世界时早八个小时。假设你的系统时钟和时区配置正确,你的UTC结果应该与世界上其他地方的UTC结果相匹配,只有几秒钟的漂移。 - tjdett

1

使用 toISOString 获取 UTC 时间戳。

var date = new Date();
date.toISOString(); // EST would be 6 hour diff from GMT

toISOString()是ES5标准,但是目前使用的浏览器中仍有相当比例不支持该方法。虽然对于不支持的浏览器来说模拟实现并不难。 - RobG
这不仅仅是旧版IE不支持吗? :P 无论如何,创建一个shim。 - Trevor

1
为了实现这一点,您需要将时区偏移应用于时间,然后从值中删除您的偏移量(测试一下,我是根据记忆猜测的)。
var now = new Date(),
    offset = -(now.getTimezoneOffset() * 60 * 1000), // now in milliseconds
    userUnixStamp = +now + offset;

现在从你自己的偏移:

var now = new Date(),
    offset = now.getTimezoneOffset() * 60 * 1000,
    yourUnixStamp = userUnixStamp - offset;

你能否给一个例子,让客户端无论如何都返回洛杉矶相同的时间戳?因为我现在无法理解它...我一直得到不同的结果。*脑袋热了 - Toby
你能再解释一下情况吗?日期是从哪里来的?你是怎么获取它的? - Eli
我需要让所有时区的客户端和服务器时间保持一致,我已经将服务器时间设置为UTC以使这个过程更简单 - 现在我试图用以下代码生成UTC时间:var d = new Date(); var utc = Math.round(d.getTime() + (d.getTimezoneOffset()*60000)/1000); 但它总是返回一个比实际时间早8个小时的微秒级时间戳 (为什么?!明明有 /1000啊)。 - Toby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接