1

我有一个网页,它在 UNIX 中记录上次查看到数据库字段时的时间。我想制作一份报告,说明上次查看此页面是多少天前。我在 PHP 中这样做

我该如何解决这个问题?目前,我有该字段显示上次使用 gmdate("MDY ", $UNIXTIMESTAMPFIELD) 访问它的时间,但我想显示的不是上次访问的日期

23 天前

谢谢

基兰

4

2 回答 2

3

如果您使用的是 PHP5.3 或更高版本,这非常容易。使用DateInterval对象,它可以理解 unix 时间戳并轻松输出差异。

您可以做的非常非常简单。假设您的时间戳是 $TS1、$TS2。

DateTime第 1 步:为每个对象创建对象:

$DT1 = new DateTime("@{$TS1}");
$DT2 = new DateTime("@{$TS2}");

第2步:区分它们

$diff = $DT1->diff($DT2);

第3步:打印东西!

echo "Days: ".$diff->d;

这会自动考虑时区设置等。如果需要,它还允许您轻松地从日期时间对象中减去。

于 2013-04-08T13:45:55.353 回答
0

差异很明显$diff = time() - $UNIXTIMESTAMPFIELD(现在事件)。不是你只需要正确格式化它:

function time_diff_to_human($seconds){
    // For seconds
    if( $seconds < 60){
        if( $seconds == 1){
            return "a second ago"
        }
        return sprintf( "%d seconds ago", $seconds);
    }

    // Minutes
    $minutes = round( $seconds/60);
    if( $minutes < 60){
        if( $minutes == 1){
            return "a minute ago"
        }
        return sprintf( "%d minutes ago", $minutes);
    }

    // Hours
    $hours = round( $minutes/60);
    if( $hours < 24){
        if( $hours == 1){
            return "last hour"
        }
        return sprintf( "%d hours", $hours);
    }

    // Add some formatting to days
    $days = $months/24;
    if( $days < 31){
        if( $days == 1){
            return 'yesterday';
        }
        return sprintf( "%d days", $days);
    }

    // Approx months
    $months = round( $days/30);
    if( $months < 12){
        if( $months == 1){
            return "last month"
        }
        return sprintf( "%d months", $months);
    }

    // And finally years, note that they are calculated from days
    $years = round( $days/365.4);
    if( $years == 1){
        return "last year"
    }
    return sprintf( "%d years", $years);

}
于 2013-04-08T13:55:00.383 回答