【发布时间】:2011-06-28 06:51:27
【问题描述】:
我正在使用 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()在格式化等方面为我工作。它也更容易维护。
标签: php date-formatting