"大约一小时前"PHP/SQL中的逻辑以及它如何影响性能?

Ari*_*ona 2 php mysql sql security benchmarking

最近我一直在面对"X小时前","X天前"功能的网站.(包括stackoverflow)

就像,Anil在一个小时前玩了一场比赛.两天前Anil平了.Anil刚才发表了这条评论.

我知道可以通过一个小函数轻松完成,该函数计算到当前时间的旧时间,以秒(或毫秒)获得差异并相应地返回字符串值.

我想问的是;

  1. 如何以最专业的方式完成?使用PHP计算时间差或在查询时根据我们的SQL计算它?
  2. 它不会降低性能吗?想象一个包含100条注释的页面,该功能将工作100次,因此页面加载速度会变慢.

PS.我不是在寻找脚本.

小智 5

通常的方法是使用普通的SQL查询来收集整数时间的差异,然后使用PHP/Javascript进行转换.换句话说,没有什么花哨的.这是大多数Twitter包装器中使用的PHP脚本:

/**
* Formats a timestamp nicely with an adaptive "x units of time ago" message.
* Based on the original Twitter JavaScript badge. Only handles past dates.
* @return string Nicely-formatted message for the timestamp.
* @param $time Output of strtotime() on your choice of timestamp.
*/
function niceTime($time) {
  $delta = time() - $time;
  if ($delta < 60) {
    return 'less than a minute ago.';
  } else if ($delta < 120) {
    return 'about a minute ago.';
  } else if ($delta < (45 * 60)) {
    return floor($delta / 60) . ' minutes ago.';
  } else if ($delta < (90 * 60)) {
    return 'about an hour ago.';
  } else if ($delta < (24 * 60 * 60)) {
    return 'about ' . floor($delta / 3600) . ' hours ago.';
  } else if ($delta < (48 * 60 * 60)) {
    return '1 day ago.';
  } else {
    return floor($delta / 86400) . ' days ago.';
  }
}
?>
Run Code Online (Sandbox Code Playgroud)

这通常是如此之快,以至于它应该比平常花费更少的时间.如果您在页面上的计算量少于300左右,则不应该看到性能下降.