我制作了一个小脚本,只是为了测试本地和在线发布请求的延迟。
在比较两个日期时,我注意到时差有点异常,客户端的时间早于应有的时间。
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云运行)且脚本在本地配置上正常工作时,才会发生这种情况。
有人可以向我解释一下吗?
答案 0 :(得分:2)
只是时钟不同步。如果您看到服务器的时间晚于客户端上success
回调中的时间,则表示服务器的时钟早于客户端的时钟/客户端的时钟晚于服务器的时钟。>
请注意,您不能依赖客户端的时钟正确无误。在很重要的情况下,请服务器告知您真正的时间(显然,确保服务器的时间已同步到NIST等可靠的时间源),同时允许网络延迟。
我确实想知道是否还有其他解释可能是时区,但是您正在做.json({"time": new Date()})
,并且当Date
对象序列化为JSON时,它会通过toISOString
创建字符串。由于您还使用toISOString
,因此您要查看的两个日期都是GMT(带有Z
时区指示符),而不是本地日期。所以不是时区。