This is what happens with Facebook: when someone makes a post, Facebook records the timestamp from the server's clock. When the information is displayed to the user, this timestamp is sent to them; however, the live "X seconds/minutes/hours ago" label is based on the client's clock. You can test this by opening Facebook and looking at some recent news feed items, then changing your system's clock -- you will see that the labels will soon update to match the difference based on your system clock.
However, if you refresh the page, the correct time difference will once again be displayed, even though your system clock is still wrong, thus it seems to be based on a time difference sent by the server as well.
Reasoning from that, I would say that they send the time difference from the server, then, the live labels are updated using that value along with a difference calculated using the client's clock.
Here is a detailed example of what I mean::
- An item is posted at 14 Jan 2011 14:40:26 (server time)
- A user loads the news feed at 14 Jan 2011 14:40:42 (server time)
- Facebook sends the current time difference on the server. (Difference between 14 Jan 2011 14:40:26 and 14 Jan 2011 14:40:42 is 16 seconds)
- The page loads in the client's browser. According to the client's computer, the time is 14 Jan 2011 14:47:03, and is recorded using JavaScript. (Server time is still 14 Jan 2011 14:40:42)
- The initial label is populated with the value from the server and now says "16 seconds ago"
- Time passes. The client's clock now says 14 Jan 2011 14:47:25. (Server time is now 14 Jan 2011 14:41:04)
- The client-side time difference is calculated: difference between 14 Jan 2011 14:47:03 and 14 Jan 2011 14:47:25 is 22 seconds
- The live label is updated using the server time difference, plus the client time difference (16 seconds + 22 seconds) and the label now says "38 seconds ago"
The actual difference between the initial timestamp from the server (14 Jan 2011 14:40:26) and the current server time (14 Jan 2011 14:41:04) is 38 seconds, so you can see that even though the client's clock was wrong, it was still possible to calculate an accurate time difference using this method.