URL中的已解析日期并不总是可用(触发空白屏幕)


Parsed date in URL isn't always available (triggers blank screen)

我试图从URL解析数据(用于过滤)。我希望能够使用http://domain.com/page.php?startDate=20150101&endDate=20150927。在这个例子中,数据使用/可见/计算从1月1日到9月27日。

当输入/更改endDate时,该日期将在过滤器中正确使用。如果没有输入,则应该使用今天的日期(但这就是错误的地方)。为此,我使用以下代码:

    $endDateFormat = DateTime::createFromFormat('Ymd', htmlspecialchars($query['endDate']));
    $endDate = $endDateFormat->format('Y-m-d'); // change YYYYMMDD to YYYY-MM-DD for MySQL.
    if (empty($endDate)) {
        $endDate = date('Y-m-d'); // Use todays date if date is not entered.
    } elseif ($endDate >= date('Y-m-d')) {
        $endDate = date('Y-m-d'); // Use todays date if date is newer than today.
    }

由于未知原因,endDate 必须在URL中添加。如果未使用,则页面为空白。如果输入,代码按预期工作:当您使用3112-2015作为endDate时,它会自动更正为今天(当然,您无法从未来获取数据),当您使用比今天更早的日期时,使用该日期。我通过检查计算和$endDate的简单回显来验证这一点。

我不知道现在如何进行,以防止空白页。目的是使用今天的日期作为endDate,如果你得到http://domain.com/page.php(因此endDate是空/NULL/不在URL中)。

这个问题也出现在startDate,但我很确定它有相同的原因。

我已经从零开始(再一次),并找到了用更少的代码为我工作的解决方案。不知道为什么我没有早点找到它,也不知道之前的"重启"出了什么问题,但下面的工作是我想要的:

        $endDate = htmlspecialchars($query['endDate']);
    if (empty($endDate)) {
        $endDate = date('Ymd');
    } elseif ($endDate >= date('Ymd')) {
        $endDate = date('Ymd');
    }