使用PHP将MySQL条目的年龄截断到最接近的时间单位

时间:2010-10-16 04:10:25

标签: php mysql datetime timestamp

我有一个带有日期时间字段的表,我想拉出时间戳并使用PHP将其转换为最接近的最大时间单位。例如,如果条目是在2分36秒之前完成的,那么我想在PHP中回显2分钟。如果是3小时5分钟前,我希望它说3个小时。如果是6天4小时40分钟,应该说是6天。你得到我的漂移。如果不到一分钟,只需几秒钟。

我对PHP的任何日期或时间函数都不熟悉,所以请不要假设我已经知道任何事情。感谢。

2 个答案:

答案 0 :(得分:1)

如果您的字段为datedatetime,则使用

  SELECT UNIX_TIMESTAMP(field) FROM...

如果您的字段存储为int(自1970年以来的秒数),请使用

  SELECT field FROM...

将数据库中的整数值转换为PHP变量$secs,这是自1970年以来的秒数。我们假设日期是过去的,然后

  $diff = time() - $secs;
  if ($diff < 60) echo $diff . ' seconds';
  else {
     $diff = intval($diff / 60);
     if ($diff < 60) echo $diff . ' minutes';
     else {
        $diff = intval($diff / 60);
        if ($diff < 24) echo $diff . ' hours';
        else {
          $diff = intval($diff / 24);
          echo $diff . ' days';
        }
     }
  }

答案 1 :(得分:1)

这是你的另一个功能:

function relativeTime($timestamp, $format = "Y-m-d")
{
    $difference = time() - $timestamp;
    if ($difference >= 604800) { // 7 days
        return date($format, $timestamp);
    }

    $periods = array("Second", "Minute", "Hour", "Day");
    $lengths = array("60","60","24","7","4.35","12","10");
    $ending = "Ago";
    for($j = 0; $difference >= $lengths[$j]; $j++)
        $difference /= $lengths[$j];
    $difference = round($difference);
    if($difference != 1) $periods[$j].= "s";
    $text = "$difference $periods[$j] $ending";
    return $text;
}

它返回的值如“5分钟前”,“3天前”和“34秒前”。但是,如果日期超过7天,则只返回完整日期,即“2010-04-19”。