找出发生了多久以前的事情

时间:2013-04-08 13:41:24

标签: php unix-timestamp

我有一个网页,在最后一次查看数据库字段时会在UNIX中记录。 我想推出一个报告,其中包含了多久前此页面的最后一次查看。我在PHP中这样做

我如何解决这个问题呢?目前我通过使用gmdate(“M D Y”,$ UNIXTIMESTAMPFIELD)显示最后一次访问的字段,但是我想显示类似

的内容,而不是上次访问的日期。

23天前

由于

基兰

2 个答案:

答案 0 :(得分:3)

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

你能做的非常非常直接。假设您的时间戳是$ TS1,$ TS2。

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

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

第2步:区分它们

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

第3步:打印东西!

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

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

答案 1 :(得分: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);

}