好的,我有一个包含2列的列表:代码和日期。
我想显示LATEST 25并告诉用户他们提交的时间。
所以,例如:
ABCDEF (1 Second Ago)
CCDEE (12 Seconds Ago)
329492 (45 Minutes Ago)
我已经走到这一步了:
$result = mysql_query("SELECT `code` FROM `fc` ORDER by datetime LIMIT 25") or die(mysql_error());
但是,它没有做我想要的。它反过来。它显示了首先输入的内容,而不是最后一次。
我的输出如下:
$output .= "<li><a href=\"http://www.***=" . htmlspecialchars(urlencode($fetch_array["code"])) . "\" target=\"_blank\">" . htmlspecialchars($fetch_array["code"]) . "</a></li>";
我不知道如何添加(时间)部分。
帮助?
谢谢:)
答案 0 :(得分:2)
尝试使用
order by datetime desc
然后在PHP中获取当前时间,减去查询返回的时间,然后查看此SO question about relative time以正确的单位显示您的时间。
答案 1 :(得分:2)
考虑ORDER BY datetime DESC
向另一个方向排序。
考虑将datetime
添加到SELECT列表中,以便您可以在PHP中访问发布日期。然后,您可以使用PHP日期/时间函数来计算当前日期和发布日期之间的差异,以计算发布过期的时间。
添加:一些代码来计算自友好格式发布以来的时间。
$seconds = time() - strtotime($fetch_array["datetime"]);
if($seconds < 60)
$interval = "$seconds seconds";
else
if($seconds < 3600)
$interval = floor($seconds / 60) . " minutes";
else
if($seconds < 86400)
$interval = floor($seconds / 3600) . " hours";
else
$interval = floor($seconds / 86400) . " days";
// You can keep on going
最后$interval
包含间隔
答案 2 :(得分:0)
如果我理解正确的问题,问题在于您没有指定排序顺序。 如果您想获取最新的帖子,您必须指定后代订单。
$ result = mysql_query(“SELECT code
FROM fc
ORDER by datetime DESC LIMIT 25”)或die(mysql_error());
答案 3 :(得分:0)
修正排序:
"SELECT `code`, `datetime` FROM `fc` ORDER by datetime DESC LIMIT 25"
为了获得时间差异,这样的事情应该有效。请注意,您应该将其重构为更好的方法,删除“幻数”等(它也可以扩展为更复杂):
function getTimeAgo ($dateTime) {
$timestamp = new DateTime($dateTime);
$currentTimestamp = new DateTime();
$diff = $currentTimestamp->getTimestamp() - $timestamp->getTimestamp();
if($diff < 0) {
throw new Exception (__METHOD__ . ':parameter $dateTime can not be
in the future!');
}
if($diff < 60) {
return "$diff seconds ago";
}
if($diff < 3600) {
return $diff/60 . " minutes ago";
}
if($diff < 86400) {
return $diff/3600 . " hours ago";
}
}
答案 4 :(得分:0)
更改日期时间顺序 在ORDER BY结束时尝试使用DESC或ASC。这应该可以解决问题:
SELECT code
FROM fc
ORDER BY datetime DESC
LIMIT 25
时间: 编写或查找将MySQL日期时间格式转换为“真正英语”的PHP函数。这是一个快速的基本示例:
<?php
// your code goes here
$timeStr = "2009-08-01 15:43:34";
$time = Sec2Time( time() - strtotime($timeStr) );
print_r($time);
// this converts mysql datetime into english
// borrowed from http://ckorp.net/sec2time.php
function Sec2Time($time){
if(is_numeric($time)){
$value = array(
"years" => 0, "days" => 0, "hours" => 0,
"minutes" => 0, "seconds" => 0,
);
if($time >= 31556926){
$value["years"] = floor($time/31556926);
$time = ($time%31556926);
}
if($time >= 86400){
$value["days"] = floor($time/86400);
$time = ($time%86400);
}
if($time >= 3600){
$value["hours"] = floor($time/3600);
$time = ($time%3600);
}
if($time >= 60){
$value["minutes"] = floor($time/60);
$time = ($time%60);
}
$value["seconds"] = floor($time);
return (array) $value;
}else{
return (bool) FALSE;
}
}
?>
输出是:
Array ( [years] => 0 [days] => 4 [hours] => 5 [minutes] => 29 [seconds] => 38 )
希望有所帮助