基本上,我正在从我的MySQL数据库中选择一个时间戳。在数据库中,时间戳如下所示:
2010-06-30 12:36:08
显然对于一个webapp来说,这对用户来说并不是很有吸引力。因此,使用一些CodeIgniter函数,我让它看起来更好一些。
<h4 class="timestamp">
<?php // Quickly calculate the timespan
$post_date = mysql_to_unix($row->date);
$now = time();
echo timespan($post_date, $now);?> ago
</h4>
如果你不做CodeIgniter,除了echo timespan()
之外,一切都是标准的PHP。 CodeIgniter只是将它称为“英语”时间跨度。因此,示例输出将是:
2 Months, 4 Weeks, 5 Hours, 20 Minutes ago
这一切都很好,但是,我想让它看起来更好......有太多的逗号,而且它太长了(我知道,我很挑剔......)。我喜欢的是:
7 hours, 33 minutes ago
4 days ago
2 weeks, 6 days ago
4 months ago
Over a year ago
正如您所看到的,我目前正在使用CodeIgniter函数来简化此操作 - 但如果有任何本机PHP函数可以执行我想要的操作,那就太棒了。
感谢您的帮助!
杰克
答案 0 :(得分:6)
最好在表示层的客户端完成。这是一个JS解决方案:
Timeago是一个jQuery插件,可以轻松支持自动更新模糊时间戳(例如“4分钟前”或“约1天前”)。
Timeago将使用class
的timeago和{8}中的ISO 8601时间戳转换所有abbr元素:
title
这样的事情:
<abbr class="timeago" title="2008-07-17T09:24:17Z">July 17, 2008</abbr>
要将日期转换为ISO 8601格式,您可以执行以下操作:
<abbr class="timeago" title="July 17, 2008">about a year ago</abbr>
示例:
你打开这个页面不到一个 一分钟前。 (这会更新每一个 分钟。等等。)
此页面最后修改了11天 前。
Ryan出生于31年前。
答案 1 :(得分:1)
$ts = new DateTime();
$ts->setTimestamp($my_timestamp);
$cur = new DateTime();
$difference = $cur->diff($ts);
if ($difference->format("%a") == 0)
$out = $difference->format("%h hours %i minutes");
elseif ($difference->format("%a") < 7)
$out = $difference->format("%a days");
elseif ($difference->format("%m") == 0) {
$days = $difference->format("%a");
$out = sprintf("%d weeks %d days", floor($days / 7),
$days % 7);
}
elseif ($difference->format("%y") == 0)
$out = $difference->format("%m months");
else
$out = "over a year";
如果你不想要“1天”之类的东西,你必须做一些调整。