我将时间Datetime
存储在Mysql
中。我想向用户显示自发布以来已经过了多长时间。
$serverdate = $row['serverdate']; //get datetime from server
$serverdate_as_datetime = date_create_from_format('Y-m-d H:i:s', $serverdate); //i fucked up here
$now = new DateTime(); // what time is it
$since = $now->diff($serverdate_as_datetime); //difference
echo $since->m.'<br>'.$since->d.'<br>'.$since->h.'<br>'.$since->i.'<br>'.$since->s;
这是疯狂的事情。起初看起来代码工作完美但在那之后我意识到两次之间的差异正在减少有时增加!!! 即使我没有触摸代码!! 我放弃了如果你建议新事我愿意尝试。谢谢你的帮助
答案 0 :(得分:0)
两次是不同的,因为$serverdate
和$now
不会同时生成
答案 1 :(得分:0)
我无法在本地复制问题。但是,应该增加的时间量,因为'then'和'now'之间的时间量随着时间的推移而增加。
我用字符串替换$row['serverdate']
,因为我没有你的数据库。
以下是可以进行的事情:
$row['serverdate']
的查询实际上并没有返回您期望的内容。 NOW()
创建数据库值,则该值将基于DB服务器时钟,而比较时间基于Web服务器的时钟。 (这就是为什么Facebook和其他网站使用“2秒前”用于非常近期的事情,即使它实际上不是2秒之前。保持大量服务器完美同步而没有延迟是不现实的。)date_create_from_format
。 See Manual。 我曾经尝试复制的代码在这里(几乎与OP相同)。
<meta http-equiv="refresh" content="0.5">
<?php
$serverdate = "2015-02-24 05:26:42"; //get datetime from server
$serverdate = date_create_from_format('Y-m-d H:i:s', $serverdate);
$now = new DateTime(); // what time is it
$since = $now->diff($serverdate); //difference
echo "m " . $since->m . "<br/>d " . $since->d . " <br />h " . $since->h . "<br />i " . $since->i . "<br />s " . $since->s;