我有一个网页,它在 UNIX 中记录上次查看到数据库字段时的时间。我想制作一份报告,说明上次查看此页面是多少天前。我在 PHP 中这样做
我该如何解决这个问题?目前,我有该字段显示上次使用 gmdate("MDY ", $UNIXTIMESTAMPFIELD) 访问它的时间,但我想显示的不是上次访问的日期
23 天前
谢谢
基兰
我有一个网页,它在 UNIX 中记录上次查看到数据库字段时的时间。我想制作一份报告,说明上次查看此页面是多少天前。我在 PHP 中这样做
我该如何解决这个问题?目前,我有该字段显示上次使用 gmdate("MDY ", $UNIXTIMESTAMPFIELD) 访问它的时间,但我想显示的不是上次访问的日期
23 天前
谢谢
基兰
如果您使用的是 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;
这会自动考虑时区设置等。如果需要,它还允许您轻松地从日期时间对象中减去。
差异很明显$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);
}