我试图从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');
}