Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.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
为什么MobileSafari似乎给出了不同于桌面浏览器的Javascript Date()结果?_Javascript_Ios_Node.js_Mobile_Mobile Safari - Fatal编程技术网

为什么MobileSafari似乎给出了不同于桌面浏览器的Javascript Date()结果?

为什么MobileSafari似乎给出了不同于桌面浏览器的Javascript Date()结果?,javascript,ios,node.js,mobile,mobile-safari,Javascript,Ios,Node.js,Mobile,Mobile Safari,我有一个奇怪的问题,我完全无法解释。为了描述这个问题,我需要描述我的webapp的这个特定部分的流程 想象一台设备,在本例中是一台运行现代浏览器的台式PC。当此用户连接时,它将充当主机。此主机检索javascript中的当前时间,如下所示: get_time : function() { var d = new Date(); return d.getTime() - this.cache.start_time;

我有一个奇怪的问题,我完全无法解释。为了描述这个问题,我需要描述我的webapp的这个特定部分的流程

想象一台设备,在本例中是一台运行现代浏览器的台式PC。当此用户连接时,它将充当主机。此主机检索javascript中的当前时间,如下所示:

get_time : function() {
              var d = new Date();
              return d.getTime() - this.cache.start_time;
              //We have tried using the modern Date.now method also but to no avail
              //return Date.now() - this.cache.start_time;
},
这段时间通过websocket发送到node.js,并临时存储在这个特定流的服务器端

现在想象一下其他几种设备,包括移动电话、平板电脑和其他台式电脑。这些设备本质上成为了主设备的奴隶,我们要求它们需要按时间同步。为了实现这一点,当这些从机连接node.js时,服务器将保存
start\u time
从该流的主服务器推送到从机

此变量成为属性
This.cache.start\u time
,如上面的函数所示

从这个开始时间开始,切分通过从开始时间减去从属浏览器中的当前时间来进行

需要这样做的原因与这个问题无关,因此我将省略它们。但是,我将通过解释每个从属服务器上正在进行的处理来补充一点细节,这些从属服务器只需要从与主服务器当前处理的阵列索引完全相同的阵列索引开始。通过将
start\u time
变量同步到主机及其所有从机,我们可以获得正确的数组索引,并从那里开始基于时间的处理

我遇到的问题是,除了mobile Safari(我已经测试了iOS 6和iOS 7 beta2)之外,我尝试的每个浏览器中,所有从机都与主机完美同步

正如您在上面的代码中所看到的,我尝试使用
Date.Now()
方法代替,但没有效果。从monitoring node.js中,我可以看到服务器正在将正确的
start\u time
推送到我的iphone中,但每次修改mobile safari中的变量时,结果似乎都会出现几秒钟的不同

更为困难的是,我目前无法使用苹果电脑,因此无法正确调试mobile Safari以了解发生了什么

我完全不知所措,无法理解苹果的javascript日期实现为何或如何将不同的结果反馈给其他浏览器。这根本没有道理

关于使用mobile Safari,是否有我不知道的地方?苹果用javascript获取当前时间的方法有什么已知的区别吗?对于如何准确收集跨浏览器一致的当前时间,还有其他建议吗

提前感谢您的任何建议或建议

编辑:我刚刚有了一个相当清醒的想法。在javascript中获取时间时,它是否使用客户端系统时钟?也就是说,如果他们在几秒钟内就出局了,这就不准确了?i、 e.主控时间可能是16:31:22,而iPhone时间可能是16:31:16


如果是这样的话,那么我需要彻底反思如何最好地同步这些设备。如果这确实是造成差异的原因,我当然会接受这一点作为答案。

正如我在上面的编辑中提到的,问题原来是由于不同设备的本地系统时间不同

我天真地认为这要归功于移动safari,因为我们所有的桌面设备都是自动时间同步的,所以它们看起来都能完美地工作

解决方案是从node.js中全局设置开始时间。并计算每个从属系统时间的偏移量。此外,由于我们现在也在测量和补偿每个设备的延迟,因此该方法对所有设备实现了更好的同步

结果在所有浏览器/设备上都是完美且一致的


虽然我原来的问题显然是错误的,但我将把这个答案留在这里,以防它对其他人有所帮助。

正如我在上面的编辑中提到的,这个问题原来是由于不同设备的本地系统时间不同造成的

我天真地认为这要归功于移动safari,因为我们所有的桌面设备都是自动时间同步的,所以它们看起来都能完美地工作

解决方案是从node.js中全局设置开始时间。并计算每个从属系统时间的偏移量。此外,由于我们现在也在测量和补偿每个设备的延迟,因此该方法对所有设备实现了更好的同步

结果在所有浏览器/设备上都是完美且一致的

虽然我最初的问题显然是错误的,但我将把这个答案留在这里,以防它对其他人有所帮助