客户端和服务器之间的时间不同,为什么?

时间:2019-05-04 15:22:29

标签: javascript node.js ajax

我制作了一个小脚本,只是为了测试本地和在线发布请求的延迟。

在比较两个日期时,我注意到时差有点异常,客户端的时间早于应有的时间。

int count = 0;
foreach(Company c in Companies) // Companies = the data you "withdraw" from the database
    if (Company.Option == OptionWanted)
        sum++;

这是结果:

//server//
app.post('/test', function(req, res){
    res.status(200).json({
            "time" : new Date()
});


//client//
$.ajax({
    type: 'POST',
    url: '/test',
    success: function(data) {
        console.log(data, (new Date()).toISOString());
}});

根据ajax文档,res.status触发成功条件,因此来自客户端的新Date应该优于服务器端时间,对吗? 仅当脚本是在线托管(Google云运行)且脚本在本地配置上正常工作时,才会发生这种情况。

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:2)

只是时钟不同步。如果您看到服务器的时间晚于客户端上success回调中的时间,则表示服务器的时钟早于客户端的时钟/客户端的时钟晚于服务器的时钟。

请注意,您不能依赖客户端的时钟正确无误。在很重要的情况下,请服务器告知您真正的时间(显然,确保服务器的时间已同步到NIST等可靠的时间源),同时允许网络延迟。


我确实想知道是否还有其他解释可能是时区,但是您正在做.json({"time": new Date()}),并且当Date对象序列化为JSON时,它会通过toISOString创建字符串。由于您还使用toISOString ,因此您要查看的两个日期都是GMT(带有Z时区指示符),而不是本地日期。所以不是时区。