我想要一个php函数将unix时间戳转换成这样:
15秒
或
45分钟
或
3小时
而不是这样:2秒,5分钟,9小时
我只想要一个像digg(制作流行的xx xxxxx)
这样的值由于
答案 0 :(得分:3)
试试这个:
function toFriendlyTime($seconds) {
$measures = array(
'day'=>24*60*60,
'hour'=>60*60,
'minute'=>60,
'second'=>1,
);
foreach ($measures as $label=>$amount) {
if ($seconds >= $amount) {
$howMany = floor($seconds / $amount);
return $howMany." ".$label.($howMany > 1 ? "s" : "");
}
}
return "now";
}
正如您所看到的,它可以灵活地添加/删除您认为合适的时间度量。请务必从最大到最小的顺序订购。测试:
print(
toFriendlyTime(0)."\n"
.toFriendlyTime(1)."\n"
.toFriendlyTime(2)."\n"
.toFriendlyTime(60)."\n"
.toFriendlyTime(3600)."\n"
.toFriendlyTime(24*3600)."\n"
);
结果:
now
1 second
2 seconds
1 minute
1 hour
1 day
答案 1 :(得分:2)
如果是针对某个网站,您可以考虑使用Timeago。否则算法非常简单。类似的东西:
$diff = $date - $now;
if ($diff > 2 * ONE_YEAR)
return sprintf("%d years", round($diff / ONE_YEAR));
else if ($diff > ONE_YEAR)
return "1 year";
else if ($diff > 2 * ONE_MONTH)
return sprintf("%d months", round($diff / ONE_MONTH));
...etc...
答案 2 :(得分:0)
PHP没有内置函数来为您完成,因此您必须手动执行此操作。此功能将获得天,小时,分钟或秒的差异,并以“X天/小时/分钟/秒”的格式返回:
<?php
function GetTimeDiff($timestamp) {
$how_log_ago = '';
$seconds = time() - $timestamp;
$minutes = (int)($seconds / 60);
$hours = (int)($minutes / 60);
$days = (int)($hours / 24);
if ($days >= 1) {
$how_log_ago = $days . ' day' . ($days != 1 ? 's' : '');
} else if ($hours >= 1) {
$how_log_ago = $hours . ' hour' . ($hours != 1 ? 's' : '');
} else if ($minutes >= 1) {
$how_log_ago = $minutes . ' minute' . ($minutes != 1 ? 's' : '');
} else {
$how_log_ago = $seconds . ' second' . ($seconds != 1 ? 's' : '');
}
return $how_log_ago;
?>