使PHP/MySQL时间戳看起来更具吸引力

Jac*_*ack 1 php mysql timestamp date-formatting

所以基本上,我正在从我的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>
Run Code Online (Sandbox Code Playgroud)

如果你不做CodeIgniter,一切都是标准的PHP,除了echo timespan().CodeIgniter只是将它称为"英语"时间跨度.因此,示例输出将是:

2 Months, 4 Weeks, 5 Hours, 20 Minutes ago

这一切都很好,但是,我想让它看起来更好......有太多的逗号,而且它太长了(我知道,我很挑剔......).我会喜欢的是:

  1. 如果时间跨度小于一天,则输出应为 7 hours, 33 minutes ago
  2. 如果时间跨度不到一周,则输出应为 4 days ago
  3. 如果时间跨度不到一个月,则输出应为 2 weeks, 6 days ago
  4. 如果时间跨度超过一个月,则输出应为 4 months ago
  5. 在最长时间超过一年的情况下,输出应该是 Over a year ago

正如您所看到的,我目前正在使用CodeIgniter函数来简化此操作 - 但是如果有任何本机PHP函数可以执行我想要的操作,那就太棒了.

谢谢你的帮助!

插口

bak*_*kal 6

这最好在表示层的客户端完成.这是一个JS解决方案:

Timeago是一个jQuery插件,可以轻松支持自动更新模糊时间戳(例如"4分钟前"或"约1天前").

Timeago将使用classtimeago和ISO 8601时间戳中的所有abbr元素title:

<abbr class="timeago" title="2008-07-17T09:24:17Z">July 17, 2008</abbr>
Run Code Online (Sandbox Code Playgroud)

进入这样的事情:

<abbr class="timeago" title="July 17, 2008">about a year ago</abbr>
Run Code Online (Sandbox Code Playgroud)

要将日期转换为ISO 8601格式,您可以执行以下操作:

<?= date("c", $post_date) ?>
Run Code Online (Sandbox Code Playgroud)

例子:

你不到一分钟就打开了这个页面.(这会每分钟更新一次.等等.)

此页面最后修改11天前.

瑞恩出生于31年前.