Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript客户端代码中获取其他国家的当前日期时间?_Javascript - Fatal编程技术网

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

如何在JavaScript客户端代码中获取其他国家的当前日期时间?,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 compare

我想知道迪拜目前在印度的约会时间, 让我们看看下面的代码,你可以得到更好的想法

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和迪拜当前日期时间之间的差异


如何实现这一点?

迪拜的时区是UTC+4

Javascript日期对象都有函数getTimezoneOffset,它提供客户端时间相对于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.

除了本地和UTC之外,Javascript无法访问时区。有许多变通办法

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

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

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

这需要以下几点:

您必须向客户机发送一次服务器时区和UTC之间的差异,例如180分钟。 您可以在客户端上使用new Date.getTimezoneOffset(例如270)计算客户端时区和UTC之间的差异。 然后,您可以减去这两者以得到客户端和服务器之间的差异。 现在您可以在客户端进行计算。 请注意,在夏时制更改期间,当服务器切换时区偏移时,这会中断。在您的情况下,这不应该是一个问题,因为迪拜没有DST,但在一般情况下

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


MDN告诉我们getTimezoneOffset确实返回UTC+X的负值和UTC-X的泊松值。谢谢你,Alexander,我已经需要另一杯咖啡了。修正我的答案。再加上你的比较不起作用。现在,getUTCHours是13岁;在澳大利亚,getHours是4,在美国是10,在欧洲是15。所以根据你的算法,澳大利亚和美国都在西半球,欧洲在东半球。我编辑asnwer的方式不再需要比较小时,它只是使用偏移量,这更简单。起初,我使用getUTCHours和getUTCDate来检查我们是否是当地时间的第二天。但这不再是必需的。我的第一个算法确实有缺陷。注意正确拼写JavaScript以避免搜索与Java冲突。