为什么移动safari似乎给出了与桌面浏览器不同的Javascript Date()结果
Why does mobile safari seem to give different Javascript Date() results from desktop browsers?
我有一个奇怪的问题,我完全无法解释。为了描述这个问题,我需要描述我的网络应用程序的这个特定部分的流程。
想象一下一台设备,在这种情况下是一台运行现代浏览器的台式电脑。当该用户连接时,它充当主用户。这个master在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_time
从该流的主服务器推送到从服务器。
这个变量变成了属性this.cache.start_time
,可以在上面的函数中看到。
从这个开始时间开始,通过从开始时间减去从属浏览器中的当前时间来进行切分。
需要这样做的原因与这个问题无关,因此我将省略它们。然而,我将添加一点细节,解释一下每个从机上正在进行的处理,只需要从与主机当前处理的数组索引完全相同的数组索引开始。通过在主节点及其所有从属节点上同步start_time
变量,我们可以获得正确的数组索引,并从中开始基于时间的处理。
我遇到的问题是,在我尝试的每一个浏览器中,除了移动Safari(我已经测试了iOS 6和iOS 7测试版2),所有的从属浏览器都与主浏览器完美同步。
正如您在上面的代码中看到的,我尝试使用Date.Now()
方法,但没有成功。通过监控node.js,我可以看到服务器正在将正确的start_time
推送到我的iphone中,但在移动safari中修改变量时的结果似乎每次都会有几秒钟的不同。
更困难的是,我目前无法访问苹果电脑,因此无法正确调试移动Safari以了解发生了什么。
我完全不知所措,无法理解苹果的javascript Date实现为什么或如何会给其他浏览器带来不同的结果。这根本没有道理。
关于使用移动Safari,是否有我不知道的地方?苹果用javascript获取当前时间的方法有什么已知的区别吗?对于如何准确地收集跨浏览器一致的当前时间,还有其他建议吗?
提前感谢您的任何建议或建议。
编辑:我刚刚有了一个相当发人深省的想法。当你用javascript获取时间时,它会使用客户端系统时钟吗?这意味着,如果他们只落后几秒钟,这将是不准确的?即Master时间可能是16:31:22,而iPhone时间可能是16时31:16。
如果是这样的话,那么我需要重新思考如何最好地同步这些设备。如果这确实是造成差异的原因,我当然会接受这个答案。
正如我在上面的EDIT中提到的,问题是由于不同设备的本地系统时间不同。
我天真地认为这是因为移动狩猎,因为我们所有的桌面设备都是自动时间同步的,所以它们看起来都很完美。
解决方案是从node.js中全局设置开始时间。并计算每个从属系统时间的偏移量。此外,这种方法为所有设备实现了更好的同步,因为我们现在也在测量和偏移每个设备的延迟。
结果在所有浏览器/设备上都是完美一致的。
虽然我最初的问题显然是错误的,但我会把这个答案留在这里,以防对其他人有帮助。
- Javascript Date.toString() formatting?
- Javascript Date 对象因格式而异:yyyy-mm-dd vs mm-dd-yyyy
- JavaScript:Date 的 toString() 和 toLocaleString() 方法之间的区别
- Javascript Date - 只设置日期,忽略时间
- Javascript Date() object with NULL Time
- Javascript Date对象到日期字符串
- Javascript Date():如何将本地日期转换为GMT
- 传递日期和日期时间之间的Javascript Date()差异
- Javascript Date MAX_VALUE
- Javascript: Date().toJSON() 更改日期.
- Javascript Date.toJSON don't获取时区偏移量
- 使用Mysql UNIX_TIMESTAMP()与JAVASCRIPT Date.UTC()获得不同的结果
- 闰年的计算似乎与JavaScript Date不匹配
- 在 Node.js 中向 javascript Date 添加分钟数
- Javascript date picker asp.net mvc
- 将数组传递给Javascript Date构造函数,是标准的吗?
- highcharts:将useUTC=true milliseconds转换为javascript Date对象
- Javascript Date 中的日期无效
- Javascript Date() 有时会返回错误的值
- 将 JavaScript Date 对象格式化为特定格式