我正在尝试显示发布评论的时间已过去多长时间。我很困惑,现在我尝试了很多方法,但似乎没有工作。在两个时间戳中找到差异
我的代码只是给年前作为输出。
这里是我的代码:
$date = new DateTime();
$newtime = $date->format('U');
$oldtime = $row['time'];
$diffrence = $newtime - $oldtime;
$date = new DateTime("@$diffrence");
$sect = round($date->format('s'));
$mint = round($date->format('i'));
$hout = round($date->format('H'));
$dayt = round($date->format('d'));
$mont = round($date->format('m'));
$yeat = round($date->format('Y'));
if ($yeat > 1970){
$disptime = "years ago";
} else if ($yeat < 1970) {
$disptime = "$mont months ago";
} else if ($mont < 0) {
$disptime = "$dayt days ago";
} else if ($dayt < 0) {
$disptime = "$hout hours $mint min ago";
} else if ($hout < 0) {
$disptime = "$mint min $sect sec ago";
} else {
$disptime = "$sect sec ago";
}
编辑获取附近的解决方案改变它yeat 0年至1970年
解决,但其他的方式找到的教程,使我自己的代码在这里解决后
$start_date = new DateTime($row['timestamp']);
$since_start = $start_date->diff(new DateTime($date->format('Y-m-d H:i:s')));
$yeat = $since_start->y;
$mont = $since_start->m;
$dayt = $since_start->d;
$hout = $since_start->h;
$mint = $since_start->i;
$sect = $since_start->s;
if ($mint == 0 && $hout == 0 && $dayt == 0 && $mont == 0 && $yeat == 0){
$disptime = "$sect sec ago";
} else if ($hout == 0 && $dayt == 0 && $mont == 0 && $yeat == 0) {
$disptime = "$mint min ago";
} else if ($dayt == 0 && $mont == 0 && $yeat == 0) {
$disptime = "$hout hours ago";
} else if ($mont == 0 && $yeat == 0) {
$disptime = "$dayt days ago";
} else if ($yeat == 0) {
$disptime = "$mont months ago";
} else {
$disptime = "$yeat years ago";
}
您应该使用['日期时间:: diff'(http://php.net/manual/datetime.diff.php),然后访问DateInterval的成员。 –
提示:UNIX时间戳是*绝对时间*。减去两个相近的UNIX时间戳会给你一个1970年1月1日之前的日期。你的'$ yeat'将始终有一个1970左右的值。 – deceze
是的,这就是发生了什么。 @deceze – deerox