Javascript 如何判断当前时间是否与时间戳完全相同,精确到毫秒?
我正在从服务器发送一个时间戳,我想让浏览器知道确切的时间是什么时候 我正在利用这一时刻,但我觉得有几种方法可以做到这一点 我已经看过在setInterval中使用isSame,但它似乎不起作用Javascript 如何判断当前时间是否与时间戳完全相同,精确到毫秒?,javascript,momentjs,Javascript,Momentjs,我正在从服务器发送一个时间戳,我想让浏览器知道确切的时间是什么时候 我正在利用这一时刻,但我觉得有几种方法可以做到这一点 我已经看过在setInterval中使用isSame,但它似乎不起作用 var interval = setInterval(function(){ if(moment().isSame(moment(data.server_time_stamp))){ console.log('MATCHES!!!') clearInterval(
var interval = setInterval(function(){
if(moment().isSame(moment(data.server_time_stamp))){
console.log('MATCHES!!!')
clearInterval(interval)
}
}, 1)
其中data.server_time_stamp是从服务器传递的瞬间对象,计算为当前时间+10秒。我已将其设置为utc,以便标准化服务器和客户端上的时区
我还尝试将其设置为unix和setInterval循环,使用===运算符查看它们是否相同。像这样:
var interval = setInterval(function(){
if(cur_time === data.screenshot_time){
console.log('MATCHES!!!')
clearInterval(interval)
}
}, 1)
尽管有了这种方法,它似乎还不够精确
最准确的测量方法是什么?你应该比较秒,而不是像@some所说的毫秒。 它可以这样工作:
moment.utc().isSame(moment(data.server_time_stamp), 'second');
我最终使用的方法是使用timesync同步所有时钟,然后在设置间隔内匹配当前时间,但尚未完全测试
var ts = timesync.create({
server: SERVER + '/timesync'
});
var interval = setInterval(function(){
if(moment(ts.now()).utc().unix() === data.screenshot_time){
console.log('SNAPPED!!!')
take_photo()
clearInterval(interval)
}
}, 1)
用户的计算机可以将其时钟设置为任何时间,但不能指望浏览器的时间与服务器的时间相同。而且,使用unix时间戳(精确到1秒)绝对无法达到毫秒精度。即使服务器和客户端已同步,事件也可能不会在您希望的毫秒发生,因此它永远不会匹配。setInterval不是每毫秒执行一次。你永远不会知道setInterval事件何时触发。例如,Chrome限制选项卡处于非活动状态时触发事件的频率。您可以存储所需的时间,然后比较该时间是否已过。你不需要库,时钟同步不是一个容易的问题。也许你可以解释为什么你认为你需要这样做,也许还有另一种方法来实现你的需要。@gforce301我有几个浏览器通过套接字监听事件。当按下管理面板上的按钮时,它会向服务器发送一个事件,告诉服务器向所有正在侦听的客户端发送一个时间戳。收听的客户都需要在同一时间截图。我将控制这些浏览器,以确保时钟同步。我添加了3秒钟的缓冲区,以确保请求及时发送到每个客户端,然后客户端所要做的就是等待并比较当前时间===接收的时间戳。谢谢。这解决了我使用isSame的问题。我没有将isSame参数设置为矩对象。可以使用isSameOrAfter。如果这两个时刻的毫秒数相同,或者当前时间在data.server_time_戳记后几毫秒,则此操作有效。