PHP timeAgo 到 return 如果时间戳在未来 X 天
PHP timeAgo to return In X days if timestamp is in the future
我有这个 PHP 函数,它 returns timeAgo 来自 timestamp.
function time_ago($time) {
$periods = array('second', 'minute', 'hour', 'day', 'week', 'month', 'year', 'decade');
$lengths = array('60', '60', '24', '7', '4.35', '12', '10');
$now = time();
$difference = $now - $time;
for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if ($difference != 1) {
$periods[$j] .= 's';
}
return $difference . ' ' . $periods[$j] . ' ago';
}
现在如果时间戳大于NOW,它将return“47年前".
如何实现 return "3 天 5 小时 16 分钟后" 如果 timestamp 大于现在?
谢谢。
function time_ago($time) {
$periods = array('second', 'minute', 'hour', 'day', 'week', 'month', 'year', 'decade');
$lengths = array('60', '60', '24', '7', '4.35', '12', '10');
$now = time();
// if($now > $time) {
$difference = $now - $time;
if ($now < $time) {
$difference = $time - $now;
}
for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if ($difference != 1) {
$periods[$j] .= 's';
}
//if ($now > $time) {
$text = $difference . ' ' . $periods[$j] . ' ago';
} elseif ($now < $time) {
$text = 'In ' . $difference . ' ' . $periods[$j];
}
return $text;
}
这可能有效。虽然我没有看到添加不同时期的循环,但只有第一场比赛。即便如此,您也可能忘记在比赛结束后打破循环。
编辑:您最好使用 DateTime::diff 函数,它与 "format" 函数混合使用可以为您自动执行此过程,更准确、更高效(因为您的循环不完整并且它只处理数组中的最后一次迭代)
我有这个 PHP 函数,它 returns timeAgo 来自 timestamp.
function time_ago($time) {
$periods = array('second', 'minute', 'hour', 'day', 'week', 'month', 'year', 'decade');
$lengths = array('60', '60', '24', '7', '4.35', '12', '10');
$now = time();
$difference = $now - $time;
for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if ($difference != 1) {
$periods[$j] .= 's';
}
return $difference . ' ' . $periods[$j] . ' ago';
}
现在如果时间戳大于NOW,它将return“47年前".
如何实现 return "3 天 5 小时 16 分钟后" 如果 timestamp 大于现在?
谢谢。
function time_ago($time) {
$periods = array('second', 'minute', 'hour', 'day', 'week', 'month', 'year', 'decade');
$lengths = array('60', '60', '24', '7', '4.35', '12', '10');
$now = time();
// if($now > $time) {
$difference = $now - $time;
if ($now < $time) {
$difference = $time - $now;
}
for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if ($difference != 1) {
$periods[$j] .= 's';
}
//if ($now > $time) {
$text = $difference . ' ' . $periods[$j] . ' ago';
} elseif ($now < $time) {
$text = 'In ' . $difference . ' ' . $periods[$j];
}
return $text;
}
这可能有效。虽然我没有看到添加不同时期的循环,但只有第一场比赛。即便如此,您也可能忘记在比赛结束后打破循环。
编辑:您最好使用 DateTime::diff 函数,它与 "format" 函数混合使用可以为您自动执行此过程,更准确、更高效(因为您的循环不完整并且它只处理数组中的最后一次迭代)