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 5.3和更高版本有DateTime
对象,您可以使用从数据库返回的数据构造对象。这些DateTime
对象有一个diff
方法来获取作为DateInterval
对象的两个日期之间的差异,然后您可以format
。
编辑:更正sub
至diff
。
编辑2: 两个卡口与做这种方式:
-
DateTime
的构造似乎没有采取UNIX时间戳......除非有@前缀,像这样:$startDate = new DateTime('@' . $timestamp);
- 如果不手动检查最大单位,你就不会知道。要获得单个字段,您仍然需要使用格式,但仅使用单个代码...类似于
$years = $dateDiff->format('y');
答
是的,可以完成。 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!"
}
答
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
+1如果你是新来的PHP日期处理,从一开始就使用'DateTime'。它比时间戳更好。 – 2010-07-16 18:49:35
我犯了一个错误,并使用sub而不是diff。我现在修好了。 – Powerlord 2010-07-16 18:51:23