2012-06-05 345 views
0

我正在製作一個新聞訂閱源,它將日期存儲爲像Tuesday 05 June 2012 04:14:44 PM這樣的字符串。PHP按日期排序?

我想做兩件事。

  1. 按日期排序的新聞訂閱(最新到最舊)
  2. 如果日期是當天的日期,只顯示時間(這也是排序)。
+2

'存儲日期作爲一個字符串'什麼在地球上使人們這樣做?不,我真的很感興趣,因爲我找不到任何理由。 – k102

+0

我有它按日期排序,但我不知道如何排序的時間,至少不是沒有很多嵌入式如果和while語句等 – user1436735

+1

您可以存儲消息的id,或使用strtotime( ),你會得到數字,數字越高,最近它是,你也可以然後將其轉換爲字符串與date()函數,谷歌是你的朋友:) – HamZa

回答

-2

此排序方法無效。您可以添加ID列並按ID排序。每次有人發佈帖子,並將其插入到Feed中時,都會插入一個遞增的ID。它與日期排序並行 - 你想要最新的。

這是最推薦和最有效的排序方法。

+0

我想過之前,但我想過的東西將無法使用它。謝謝:) – user1436735

+2

嗯......但爲什麼?我認爲在特殊的日期時間字段中存儲日期將解決所有問題。帶ID - 如何選擇全部'昨天'的帖子? – k102

3

我會更改存儲以存儲一些「unix timestamp」。從那你可以打印出whatever format of date you like。而且,它是一個數字,非常容易排序。

+0

這很完美。謝謝!我不知道你可以用日期函數格式化時間戳。 – user1436735

+0

不,當你發現時,這是一種幸福..也曾經一度遇到過這種問題;) – Gustav

0

我想這可以解決您的問題,但我建議您儘可能修改表格設計。

$result = mysql_query("SELECT * FROM newsfeed"); 

$records = array(); 
$i = 0; 
while ($row = mysql_fetch_array($result)) 
{ 
    $records[$i] = array('news_idPK' => $row['news_idPK'], 
        'date' => date("Y-m-d H:i:s", strtotime($row['date'])), 
        'news' => $row['news'] 
    ); 
    $i++; 
} 
usort($records, "cmp"); 

function cmp($a, $b) { 
    $a = strtotime($a['date']); 
    $b = strtotime($b['date']); 
    return $a - $b; 
} 

$ctr = count($records)-1; 
for($x=$ctr; $x>=0; $x--) 
{ 
    $newsDate = date("l d F Y h:i:s A", strtotime($records[$x]['date'])); 
    if(date("Y-m-d", strtotime($records[$x]['date'])) == date("Y-m-d")) 
    { 
     $newsDate = date("h:i:s A",strtotime($records[$x]['date'])); 
    } 
    echo $records[$x]['news_idPK']." - ".$newsDate." - ".$records[$x]['news']." <br/>"; 
} 
+0

正如他們所說[強烈推薦**使用** mysqli **擴展名代替] (http://php.net/manual/en/mysqli.overview.php) –

+0

。:哦,對不起,抱歉that.tnx! :) – sephoy08