1

データベース フィールドに最後に表示されたときを UNIX で記録する Web ページがあります。このページが最後に表示されたのは何日前かを含むレポートを作成したいと考えています。私はPHPでこれをやっています

これを表示するにはどうすればよいですか?現時点では、 gmdate("MDY ", $UNIXTIMESTAMPFIELD) を使用して最後にアクセスした日時を示すフィールドがありますが、最終アクセスの日付の代わりに次のようなものを表示したい

23日前

ありがとう

キーラン

4

2 に答える 2

3

PHP5.3 以降を使用している場合、これは非常に簡単です。DateIntervalUNIX タイムスタンプを理解し、簡単に差分を出力できるオブジェクトを使用します。

できることは、非常に簡単です。タイムスタンプが $TS1、$TS2 であるとします。

ステップ 1:DateTimeそれぞれのオブジェクトを作成します。

$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 に答える