我有一个网页,在最后一次查看数据库字段时会在UNIX中记录。 我想推出一个报告,其中包含了多久前此页面的最后一次查看。我在PHP中这样做
我如何解决这个问题呢?目前我通过使用gmdate(“M D Y”,$ UNIXTIMESTAMPFIELD)显示最后一次访问的字段,但是我想显示类似
的内容,而不是上次访问的日期。23天前
由于
基兰
答案 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);
}