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

时间:2017-06-21 13:11:53

标签: 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)和迪拜当前的dateTime。

我如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

除了本地和UTC之外,Javascript无法访问时区。有很多解决方法。

  1. 您可以检查是否可以在服务器上将每个日期转换为UTC,以UTC格式将其发送到客户端并将其从UTC转换为本地。但如果日期应该显示在迪拜时区,这是不可行的。

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

  3. 如果您需要及时更新,这意味着无法传输时间,下一个最好的方法是了解两个时区之间的当前差异。

    这需要以下内容:

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

    请注意,在夏令时更改期间服务器切换时区偏移时,这会中断。在你的情况下不应该是一个问题,因为迪拜没有DST,但在一般情况下。

  4. 如果您确实需要在客户端上提供完整的时区可用性,请查看moment.tz。您必须了解如何让服务器了解moment.tz个时区,反之亦然。就我而言,我完全删除了moment.tz的内置时区,将所有服务器时区转换为服务器端的moment.tz格式,并将它们作为JSON传输给客户端。

答案 1 :(得分:0)

迪拜的时区是UTC + 4

Javascript Date对象都具有函数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.