Unix时间戳到秒,分钟,小时

问题描述:

我需要以某种方式采取unix时间戳并输出它像下面Unix时间戳到秒,分钟,小时

这可以用MySQL来完成吗?或PHP

Mike        7s ago 
Jim        44s ago 
John        59s ago 
Amanda       1m ago 
Ryan        1m ago 
Sarah       1m ago 
Tom        2m ago 
Pamela       2m ago 
Ruben       3m ago 
Pamela       5h ago 

正如您可以猜到我只想打印分钟,而不是分和秒(1分3秒前)

我应该怎么考虑?

PHP的date()功能

以及time()和其他一些人正在该文档

这也可以在MySQL做与date and time功能

你可以试试我的Timeago建议here链接。

它可以给输出是这样的:

你打开这个网页不到一 分钟前。 (这将更新每个 分钟,等待它。)

本页面最后 前修改11天。

瑞恩出生31年前

PHP 5.3和更高版本有DateTime对象,您可以使用从数据库返回的数据构造对象。这些DateTime对象有一个diff方法来获取作为DateInterval对象的两个日期之间的差异,然后您可以format

编辑:更正subdiff

编辑2: 两个卡口与做这种方式:

  1. DateTime的构造似乎没有采取UNIX时间戳......除非有@前缀,像这样:$startDate = new DateTime('@' . $timestamp);
  2. 如果不手动检查最大单位,你就不会知道。要获得单个字段,您仍然需要使用格式,但仅使用单个代码...类似于$years = $dateDiff->format('y');
+0

+1如果你是新来的PHP日期处理,从一开始就使用'DateTime'。它比时间戳更好。 – 2010-07-16 18:49:35

+0

我犯了一个错误,并使用sub而不是diff。我现在修好了。 – Powerlord 2010-07-16 18:51:23

是的,可以完成。 See related post

$before // this is a UNIX timestamp from some time in the past, maybe loaded from mysql 
$now = time() 

$diff = $now - $before; 
if(1 > $diff){ 
    exit('Target Event Already Passed (or is passing this very instant)'); 
} else { 
    $w = $diff/86400/7; 
    $d = $diff/86400 % 7; 
    $h = $diff/3600 % 24; 
    $m = $diff/60 % 60; 
    $s = $diff % 60; 

    return "{$w} weeks, {$d} days, {$h} hours, {$m} minutes and {$s} secs away!" 
} 

我不手边有一个MySQL服务器,但以下命令的组合应该让你像你想要什么。

DATEDIFF

DATEFORMAT

function sECONDS_TO_DHMS($seconds) 
{ 

    $days = floor($seconds/86400); 
    $hrs = floor($seconds/3600); 
    $mins = intval(($seconds/60) % 60); 
    $sec = intval($seconds % 60); 

    if($days>0){ 
     //echo $days;exit; 
     $hrs = str_pad($hrs,2,'0',STR_PAD_LEFT); 
     $hours = $hrs-($days*24); 
     $return_days = $days." Days "; 
     $hrs = str_pad($hours,2,'0',STR_PAD_LEFT); 
    }else{ 
     $return_days=""; 
     $hrs = str_pad($hrs,2,'0',STR_PAD_LEFT); 
    } 

    $mins = str_pad($mins,2,'0',STR_PAD_LEFT); 
    $sec = str_pad($sec,2,'0',STR_PAD_LEFT); 

    return $return_days.$hrs.":".$mins.":".$sec; 
} 

echo sECONDS_TO_DHMS(2); // Output 00:00:02 
echo sECONDS_TO_DHMS(96000); // Output 1 Days 02:40:00