Unix时间戳转换成秒、分钟、小时

4

我需要将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

你可能猜到我只想打印分钟,而不是分钟和秒钟(1m 3s ago)。

我应该看哪些方面?

6个回答

14

可以做到。 请参见相关帖子

$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!"
}

6
PHP 5.3及以上版本提供了DateTime对象,您可以使用从数据库返回的数据构造这些对象。这些DateTime对象有一个diff方法,用于获取两个日期之间的差异作为DateInterval对象,然后可以使用format进行格式化。

编辑:将sub更正为diff

编辑2: 使用此方式有两个注意点:

  1. DateTime的构造函数似乎不接受UNIX时间戳...除非在前面加上@,像这样:$startDate = new DateTime('@' . $timestamp);
  2. 你不会知道最大的单位是什么,除非手动检查它们。要获取单个字段,仍然需要使用格式,但只使用一个代码...类似于$years = $dateDiff->format('y');

如果你是 PHP 日期处理的新手,请从一开始就使用 DateTime。它比时间戳要好得多。 - Pekka
我犯了一个错误,使用了sub而不是diff。现在我已经修复了它。 - Powerlord

1
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

0

PHP的date()函数

以及time()和其他一些在这些文档中链接的函数

这也可以使用Mysql的date and time函数来实现


0

你可以尝试我的Timeago建议这里

它可以输出像这样的结果:

您在不到一分钟前打开了此页面。(这将每分钟更新一次。请等待。)

此页面上次修改于11天前

Ryan出生于31年前


0

我手头没有MySQL服务器,但以下命令的组合应该可以让你得到类似于你想要的东西。

DATEDIFF

DATEFORMAT


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接