如何在JavaScript中获取客户端代码中其他国家/地区的当前日期时间?

问题描述:

我想迪拜的当前日期时间在印度, 让我们来看看娄代码,你可以得到更好的主意,如何在JavaScript中获取客户端代码中其他国家/地区的当前日期时间?

var compareDate = r.get('updatedate'); 
var diff = new Date() - new Date(compareDate); 

diff /= 60000; // diff converted in minute 

if (diff >= 60) { 
    return true; 
} else { 
    return false; 
} 

这里,var compareDate包含一个日期时间值。这是来自服务器端,并且此日期在迪拜时区的服务器端更新。

new Date()获取应用程序运行的当前日期(例如,我在印度运行应用程序)。

这将在印度或除迪拜以外的其他国家产生不正确的结果。

所以我想区分数据库价值(compareDate)和迪拜的当前日期时间。

我该如何做到这一点?

+0

小心正确拼写JavaScript以避免与Java的搜索冲突。 –

JavaScript有除了本地和UTC没有进入时区。有很多解决方法。

  1. 你可以检查你是否可以在每次日期转换为UTC在服务器上,它发送到客户端在UTC,它从UTC转换为本地那里。但是如果日期应该在迪拜时区显示,这是不可行的。

  2. 向客户端获取当前服务器时间的最简单方法是将其从服务器传输到客户端;或者计算服务器端的差异并将其发送给客户端。

  3. 如果您需要即时更新,这意味着时间传输不可行,次最好的方法是了解两个时区之间的当前差异。

    这需要以下条件:

    • 你要发送到客户端一旦服务器时区和UTC,例如之间的差异180分钟。
    • 您可以使用new Date().getTimezoneOffset()(例如,)来计算客户端时区与UTC之间的差异。 270.
    • 然后您可以减去两者以获得客户端和服务器之间的差异。
    • 现在你可以在客户端计算。

    请注意,如果服务器在夏令时更改期间切换时区偏移,则会中断此操作。由于迪拜没有DST,但在一般情况下,这不应该成为您的问题。

  4. 如果您确实需要客户端的完整时区可用性,请查看moment.tz。你将不得不看看如何让服务器了解时区,反之亦然。在我的情况下,我完全删除了moment.tz的内置时区,将服务器端的所有服务器时区转换为moment.tz格式,并将它们作为JSON传输到客户端。

迪拜的时区为UTC + 4

javascript日期对象都具有的功能getTimezoneOffset()MDN),它给你的客户对UTC时间偏移量,以分钟为单位。

了解实际抵消,我们可以调整客户的时间,以我们想要的任何时区。

例子:

var compareDate = r.get('updatedate'); //Dubai's date. 
var localTime = new Date(); 
var offset = localTime.getTimezoneOffset(); 

var dubaiOffset = compareDate.getTimezoneOffset() - offset; //calculate local time's offset against Dubai. 

var diff += (new Date() + dubaiOffset*60000) - new Date(compareDate); 
diff /= 60000; 
// The rest of your code goes here. 
+0

MDN告诉我们'getTimezoneOffset'不会为UTC + X返回负值,并且会为UTC-X返回有价值的值。 – Alexander

+0

谢谢亚历山大,我还需要另一杯咖啡。修复我的答案。 –

+0

加上你的比较不会奏效。现在,'getUTCHours'是13;在澳大利亚,'getHours'是4,在美国是10,在欧洲是15。所以根据你的算法,澳大利亚和美国都在西半球,欧洲在东半球。 – Alexander