2014-01-19 22 views
1

感謝這個問題的答案,我設法只使用PHP在將來(即今天之後)從我的MySQL數據庫輸出一個列表日期。但是,如果我想將「今天」稍微設置一下,該怎麼辦?換句話說,如果我想要一個日期不提前一個星期出現在日期列表中?爲什麼不是DateTime :: sub按預期工作?

我試圖使用DateTime::sub使用下面的代碼,但它殺死我的腳本(我只是得到一個空白的屏幕 - 如果我註釋掉DateTime ::子行,它再次工作,我仍然沒有工作了解如何讓PDO回顯錯誤細節):

$dateToday = new DateTime('now'); 
$dateToday -> sub(new DateInterval('P7D')); 

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

什麼是「P7D」? – wallyk

+0

期間,7天。 –

+0

@PezCuckow:這是[未顯示](http://us1.php.net/manual/en/class.dateinterval.php)作爲DateInterval的一種可能性 – wallyk

回答

1

你的代碼工作對我蠻好,我想這是這一行的一個問題:

$dateCompare = new DateTime($row['date']); 

什麼格式是$行的日期?

我推薦使用

$date = DateTime::createFromFormat('The format your dates are in', $row['date']); 

可能的日期格式

例如見http://www.php.net/manual/en/function.date.php Y-M-d將解析2012年10月28日


如果你有PHP的舊版本,你可以通過爲字符串比較嘗試這種「低技術」的解決方案。

// Assuming your mysql is Y-m-d 
$dateToday = date('Y-m-d') 

do{ 
    if ($row['date'] > $dateToday){ 
     echo '<p>'.$dateCompare -> format('Y-m-d').'</p>'; 
    } else { 
     echo '<p>FALSE</p>'; 
    } 
while... 
+0

$ date變量在我的MySQL數據庫Y-m-d中處於DATE格式。如果我註釋掉'sub'行,它可以正常工作。 – ElendilTheTall

+0

'DateTime :: createFromFormat('Y-m-d')'會很好用! –

+0

你有什麼PHP版本? Sub只支持'(PHP 5> = 5.3.0)' –

相關問題