我正在使用 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('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;
}
最佳答案
date() 的结果取决于您的时区。您可以通过 date_default_timezone_set() 手动设置时区来更改此行为
关于php - 相对日期格式总是输出 "3 hours ago",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6502676/