我正在使用 php 计算指定日期和当前日期之间的日期间隔。我这样做是为了打印出社交友好的时间戳A few mins ago
,例如2 hours ago
当我来到小时部分时,我在 php 中得到了一些非常有趣的东西。下面是完整的工作代码,但是当您hours
用此代码替换部件时,它总是打印 3 小时。
定义常量 DATE
// The current date timestamp
define('DATE', time());
错误代码在这里:
//Only the hours part that' doing something weird
case ($interval >= 3600 && $interval < 86400) :
$return = ( date('H', $interval) < 2)
? (int)date('H', $interval) . ' hour ago'
: (int)date('H', $interval) . ' hours ago';
break;
它在指定日期时中断,在这种情况下,假设创建日期刚刚超过一个小时,因此导致间隔等于 3660 秒。看起来 date 方法调用的date('H', 3660)
结果是 03。它不应该导致 01 吗?毕竟只是一个多小时。
这里的工作代码:
public static function getTimeInterval($date)
{
$interval = DATE - $date;
$return = '';
switch ( $interval )
{
case ($interval <= 60) :
$return = 'a few secs ago';
break;
case ($interval > 60 && $interval < 3600) :
$return = (int)date('i', $interval) . ' mins ago';
break;
case ($interval >= 3600 && $interval < 86400) :
$return = ( abs((date('G', DATE) - date('G', $date))) < 2)
? abs((date('G', DATE) - date('G', $date))) . ' hour ago'
: abs((date('G', DATE) - date('G', $date))) . ' hours ago';
break;
case ($interval >= 86400 && $interval < 604800) :
$return = ( (int)date('j', $interval) === 1)
? (int)date('j', $interval) . ' day ago'
: (int)date('j', $interval) . ' days ago';
break;
case ($interval > 604800 && $interval <= 2592000) :
$return = 'A few weeks ago';
break;
case ($interval > 2592000) :
$return = date('n', $interval) . ' months ago';
break;
case ($interval > 31536000) :
$return = 'Over a year ago';
break;
}
return $return;
}