2014-01-19 81 views
0

我有一個MySQL數據庫與日期列表。我想將所有這些日期(如果發生在今天之後)輸出到頁面中。日期以DATE格式存儲在數據庫中,如Y-m-d爲什麼這個PHP日期比較不符合我的預期?

我有下面的代碼(不包括查詢等):

$dateToday = date('Y-m-d'); 

do{ 
    $dateCompare = new DateTime($row['date']); 
    if ($dateCompare > $dateToday){ 
     echo '<p>'.$dateCompare -> format('Y-m-d').'</p>'; 
    } else { 
     echo '<p>FALSE</p>'; 
    } 
}while ($row = $stmt->fetch(PDO::FETCH_ASSOC)); 

但這只是輸出所有的日期,包括一個我在過去設置用於測試目的。我究竟做錯了什麼?

+0

你做錯了,最明顯的是在應用層過濾從你的DBMS的數據集。這應該在DBMS層完成。接下來的事情是做錯了數據的格式和類型的假設 - 告訴我們什麼值被比較。 – symcbean

+0

我不知道前兩句是什麼意思...... – ElendilTheTall

回答

3

$dateToday是一個字符串。 $dateCompareDateTime對象。

+0

所以我應該使用'strtotime()'來轉換$ dateToday? – ElendilTheTall

+0

比較蘋果和橘子絕不是一個好主意,所以要確保它們都是蘋果或桔子。因此,確保兩者都是'DateTime'類型,或者是一個unix時間戳或一個可比較的字符串(以ISO8601格式)。在大多數情況下,我會選擇unix時間戳。 –

+0

謝謝 - 剛分配'$ dateToday'作爲'new DateTime('now');'這是完美的。 – ElendilTheTall

0

嘗試將日期從myssql轉換爲日期時間對象並輸出。

$changetime = new DateTime($time, new DateTimeZone('UTC')); 

    ECHO $changetime->format('m/d/y h:i a'); 

// list of timezones http://us1.php.net/manual/en/timezones.php 

我實際上使用它來輸出我所有的MYSQL日期時間數據 - 允許我轉換爲任何時區。請注意,這將假設您的日期時間是UTC - 您應該轉換爲您的時區。

0
$stmt->setFetchMode(PDO::FETCH_ASSOC); 
foreach ($stmt as $row) { 
    $time = strtotime($row['date']); 
    if ($_SERVER['REQUEST_TIME'] - $time) { 
     echo '<p>'. date('Y-m-d', $time) . '</p>'; 
    } else { 
     echo '<p>FALSE</p>'; 
    } 
}