使用PHP的Unix时间戳的相对日期
我见过其他一些人谈论相对日期,但我仍然没能让它正常工作 我的脚本从MySQL数据库中提取unix时间戳,我希望它显示如下内容: 2分钟前使用PHP的Unix时间戳的相对日期,php,Php,我见过其他一些人谈论相对日期,但我仍然没能让它正常工作 我的脚本从MySQL数据库中提取unix时间戳,我希望它显示如下内容: 2分钟前 16小时前 11月10日星期二晚上7点 感谢所有能够提供帮助的人。这通常是通过一些客户端逻辑来确定显示时间字符串的粒度。假设查询返回unix样式的时间戳: SELECT UNIX_TIMESTAMP(now()), blog_post_timestamp FROM ... 您将获得(使用编造的数字):1234900两个时间值。因此,时差为334秒(1234-
16小时前
11月10日星期二晚上7点
感谢所有能够提供帮助的人。这通常是通过一些客户端逻辑来确定显示时间字符串的粒度。假设查询返回unix样式的时间戳:
SELECT UNIX_TIMESTAMP(now()), blog_post_timestamp FROM ...
您将获得(使用编造的数字):1234900
两个时间值。因此,时差为334秒(1234-900),您可以处理它:
if (time_difference < 60) {
$time_display = "Posted $time_difference seconds ago";
} if ((time_difference >= 60) AND (time_difference < 3600)) {
$minutes = ceil($time_difference / 60);
$time_display = "Posted $minutes minutes ago";
} else {
$hours = ceil($time_difference / 3600);
$time_display = "Posted $hours hours ago";
}
if(时差<60){
$time\u display=“在秒前发布$time\u差异”;
}如果((时差>=60)和(时差<3600)){
$minutes=ceil(时差/60);
$time\u display=“在$minutes分钟前发布”;
}否则{
$hours=ceil(时差/3600);
$time\u display=“在$hours前发布”;
}
您只需不断添加更多您想要的时间单位:天、周、月、年、世纪等等。可能有更好的方法,但这里有一个我多年前为此编写的粗略函数:
function time_ago($datetime)
{
if (is_numeric($datetime)) {
$timestamp = $datetime;
} else {
$timestamp = strtotime($datetime);
}
$diff=time()-$timestamp;
$min=60;
$hour=60*60;
$day=60*60*24;
$month=$day*30;
if($diff<60) //Under a min
{
$timeago = $diff . " seconds";
}elseif ($diff<$hour) //Under an hour
{
$timeago = round($diff/$min) . " mins";
}elseif ($diff<$day) //Under a day
{
$timeago = round($diff/$hour) . " hours";
}elseif ($diff<$month) //Under a day
{
$timeago = round($diff/$day) . " days";
}else
{
$timeago = round($diff/$month) ." months";
}
return $timeago;
}
function time\u ago($datetime)
{
如果(是数值($datetime)){
$timestamp=$datetime;
}否则{
$timestamp=strottime($datetime);
}
$diff=time()-$timestamp;
$min=60;
$hour=60*60;
$day=60*60*24;
$month=$day*30;
如果($diff我今天刚刚写了一个简单的函数,
供参考:-
/* calculate simple human readable time format */
function simple_human_date($from, $to)
{
$diff = $to - $from;
$range = array
(
'year' => 31536000,
'month' => 2592000,
'day' => 86400,
'week' => 604800,
'hour' => 3600,
'min' => 60
);
foreach ($range as $unit=>$sec)
{
if ($diff > $sec)
{
$round = round($diff/$sec);
break;
}
}
if (empty($round))
{
return 'just now';
}
else
{
return sprintf('%d %s%s ago', $round, $unit, $round>1?'s':'');
}
}
注意:这个想法是在PHP5.3.0中组装如下内容:-+
例如:
$d1 = new DateTime();
$d2 = new DateTime();
$d2->modify('-1 day');
echo $d2->diff($d1)->format('%d') ' day';
另见
这需要日期时间(00:00 ish)还是UNIX时间戳(1322061969)?如果它需要一个日期时间,我如何将时间戳转换为它?它需要一个日期时间。我已经更新了我的答案,以显示如果您想传递unix时间戳,它会是什么样子。非常感谢。我真的很感激。不用担心,正如我所说,它不是最好的函数,但它可以用于简单的事情。它没有考虑到时间戳avings和$min/$hour/$day/$month变量可能应该显式设置,而不是让PHP来计算它们,但这在服务器上不应该是一个很大的开销,所以我想这不是一个大问题。除了一年中不总是有31536000秒。一天中也不总是有86400秒。请不要重新发明日期数学。这比你想象的要困难得多。有很多事情你需要跟踪(夏令时、闰秒、闰年等)…好吧…是为了简单使用(根据函数的说法),加上超过50%的人住在没有DST的地区:)你不是在问一个实际的技术问题,也不是在发布源代码让人们识别缺陷并帮助你修复。我做了搜索,但我只能找到与我的困境无关的答案。ASP.NET中有一个与datetime有关,但这不是我要问的。还有一个与datetime有关,但同样,我要处理的是UNIX时间戳,我也不一定要求别人为我编写一个函数,只是如果有人遇到一个适合其他地方的函数,或者他们以前为另一个项目编写过一个函数。