データベース フィールドに最後に表示されたときを UNIX で記録する Web ページがあります。このページが最後に表示されたのは何日前かを含むレポートを作成したいと考えています。私はPHPでこれをやっています
これを表示するにはどうすればよいですか?現時点では、 gmdate("MDY ", $UNIXTIMESTAMPFIELD) を使用して最後にアクセスした日時を示すフィールドがありますが、最終アクセスの日付の代わりに次のようなものを表示したい
23日前
ありがとう
キーラン
データベース フィールドに最後に表示されたときを UNIX で記録する Web ページがあります。このページが最後に表示されたのは何日前かを含むレポートを作成したいと考えています。私はPHPでこれをやっています
これを表示するにはどうすればよいですか?現時点では、 gmdate("MDY ", $UNIXTIMESTAMPFIELD) を使用して最後にアクセスした日時を示すフィールドがありますが、最終アクセスの日付の代わりに次のようなものを表示したい
23日前
ありがとう
キーラン
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;
これにより、特にタイムゾーン設定が自動的に考慮されます。また、必要に応じて日時オブジェクトから簡単に減算することもできます。
違いは明らかです$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);
}