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" 函数混合使用可以为您自动执行此过程,更准确、更高效(因为您的循环不完整并且它只处理数组中的最后一次迭代)

http://php.net/manual/en/datetime.diff.php