为什么DateTime :: sub不按预期工作?

时间:2014-01-19 16:55:57

标签: php mysql datetime pdo

感谢这个问题的答案,我设法只使用PHP从我的MySQL数据库中输出未来(即今天之后)的列表日期。但是,如果我想把'今天'放回一点,该怎么办呢?换句话说,如果我希望一个日期不提前一周出现在日期列表中?

我尝试使用以下代码使用DateTime::sub,但它会杀死我的脚本(我只是得到一个空白屏幕 - 如果我注释掉DateTime :: sub line,它会再次运行。我仍然是避风港我们弄清楚如何让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));

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你的代码对我来说效果很好,我想这就是这行的一个问题:

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

$ row的日期是什么格式?

我建议使用

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

有关可能的日期格式,请参阅http://www.php.net/manual/en/function.date.php

e.g。 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...