在Facebook和Twitter中,我们可以看到每个事件都有“23秒前”或“1小时前”的时间戳。鸣叫。如果我们离开页面一段时间,时间戳会相应地改变。
由于用户机器可能没有与服务器机器相同的系统时间,如何使动态时间戳准确?
我的想法是: 它始终基于服务器时间。当请求发送到网页的服务器时,时间戳T1(秒到1970/1/1)将呈现为内联javascript变量。显示的时间戳(“23秒前”)由T1而不是当地时间计算。
我不确定这是Facebook / Twitter的做法。有没有更好的主意?
答案 0 :(得分:2)
这就是Facebook的情况:当有人发帖时,Facebook会记录服务器时钟的时间戳。当信息显示给用户时,该时间戳被发送给他们;但是,实时“X秒/分钟/小时前”标签基于客户端的时钟。您可以通过打开Facebook并查看最近的一些新闻Feed项目,然后更改系统的时钟来测试这一点 - 您会看到标签很快就会根据系统时钟更新以匹配差异。
但是,如果刷新页面,即使您的系统时钟仍然错误,也会再次显示正确的时差,因此它似乎是基于由服务器也是。
由此推断,我会说他们从服务器发送时差,然后,使用该值更新实时标签以及使用客户端时钟计算的差异。
以下是我的意思::
的详细示例服务器初始时间戳( 2011年1月14日14:40:26 )与当前服务器时间之间的实际差异( 2011年1月14日14:41:04 )是38秒,所以你可以看到,即使客户的时钟错误,仍然可以使用这种方法计算准确的时差。
答案 1 :(得分:0)
简单的答案是,所有时间都在服务器上,当您获得推文列表时,您会看到创建推文和向您提供推文之间的时间差异。您在客户端不需要任何东西
答案 2 :(得分:0)
Facebook和Twitter计算服务器端的时间,并将时间戳输出为普通文本。在这些网站上没有客户端计算时间,至少不是我观察到的。
如果你现在看到http://twitter.com/的来源,你会看到这样的HTML:
<div class="hc-tweet">
<div class="hc-label">Recently tweeted:</div>
<div class="hc-tweet-text">You don't know pain until you've worked in a French bakery.</div>
<div class="hc-meta">about 1 hour ago</div>
</div>
如果你查看典型Facebook页面的来源,你会看到这样的HTML:
<abbr title=\"Saturday, 15 January 2011 at 09:40\" data-date=\"Fri, 14 Jan 2011 14:40:26 -0800\" class=\"timestamp\">6 hours ago<\/abbr>
请注意,这个Facebook HTML实际上是在一个Javascript字符串中(这就是为什么在引号之前有一个反斜杠) - 所以即使Facebook使用Javascript来填充时间戳,它也是在服务器端计算的。