我見過其他一些人談論相對日期,但我仍然沒有設法使它正常工作。從Unix的時間戳與PHP的相對日期
我的腳本從MySQL數據庫拉動unix時間戳,我希望它顯示是這樣的:
2分鐘前
17小時以前
週二11月10日晚上7點
感謝任何可以幫助的人。
我見過其他一些人談論相對日期,但我仍然沒有設法使它正常工作。從Unix的時間戳與PHP的相對日期
我的腳本從MySQL數據庫拉動unix時間戳,我希望它顯示是這樣的:
2分鐘前
17小時以前
週二11月10日晚上7點
感謝任何可以幫助的人。
有可能是一個更好的方式來做到這一點,但這裏有一個粗略的功能,我寫了很久以前的事了這一點:
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;
}
通常通過一些客戶端邏輯來確定顯示時間字符串的粒度。假設你的查詢返回的UNIX風格的時間戳:
SELECT UNIX_TIMESTAMP(now()), blog_post_timestamp FROM ...
你會得到(使用編造的號碼):1234 900
你的兩個時間值。因此,時間差爲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";
}
,你只要不斷添加更多的時間單位,只要你想:天,周,月,年,百年來,等...
我今天剛寫了一個簡單的功能,
供大家參考: -
/* 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':'');
}
}
注意:這個想法是組裝這樣的: - http://youlookfab.com/welookfab/
在PHP 5.3.0+
例子:
$d1 = new DateTime();
$d2 = new DateTime();
$d2->modify('-1 day');
echo $d2->diff($d1)->format('%d') ' day';
參見 http://php.net/manual/en/dateinterval.format.php http://php.net/manual/en/datetime.modify.php
你並不是在問一個實際的技術問題,您也不會發布人員的源代碼來識別缺陷並幫助您解決問題。 –
我做了搜索 - 但我只能找到與我的困境無關的答案。在ASP.NET中有一個與日期時間有關的事,但這不是我所要求的。還有一個與日期時間有關的問題,但我又處理UNIX時間戳。 我也不一定要求某人爲我寫一個函數,就像任何人遇到了一個適合其他地方的東西,或者如果他們之前已經爲另一個項目寫了一個東西。 – Alfo