我正在比较日期与当前日期(即今天的日期)。预计只有当要比较的日期大于今天的日期时,才会出现错误。它不应该是小于或等于今天的日期的日期。
我为它编写了以下代码。
$submission_date = $_POST['submission_date']; //The date in mm-dd-yyyy format that is to be tested against today's date. The value in $submission date is 12-25-2014
//This is a future date. Today's date is 12-10-2014 in dd-mm-yyyy format
$current_date = date('m-d-Y');
if (strtotime($submission_date) > strtotime($current_date))
{
echo "Future date not accepted";
}
使用上面的代码,我不会收到未来日期的错误,有时我也会收到以前日期的错误。
如何优化并使此代码正确和标准?
如果发布的格式是 m-d-Y
,那么您不能使用 strtotime()
函数直接将其转换为 unix 时间戳,因为它会返回 false
。
如果需要使用strtotime()
则将输入格式更改为"通过简单str_replace()
m/d/Y
。
另一方面,您可以使用DateTime
类,您可以在其中直接比较对象:
$submission_date = DateTime::createFromFormat('!m-d-Y', $submission_date);
$today_date = new DateTime('today');
if ($submission_date > $today_date) {
echo "submission_date is in the future'n";
}
演示
如果需要从 DateTime 对象中提取一些信息,请对它们使用format()
方法,该方法接受与函数相同的格式date()
:
echo $today_date->format('m/d/Y'); # 12/11/2014
echo $today_date->format('m-d-Y'); # 12-11-2014
echo $today_date->format('Y-m-d'); # 2014-12-11
echo $today_date->format('Y-Y-Y'); # 2014-2014-2014
演示
我认为您需要以"Y-m-d"或"d-m-Y"格式比较日期。我认为无法以"m-d-Y"格式比较日期
由于我们对您的代码进行了更改,并且我们从我的角度测试它是否有效,因此您可以在下面尝试。
$submission_date = $_POST['submission_date'];
$current_date = date('d-m-y H:i:s');
if (strtotime($submission_date) > strtotime($current_date))
{
echo "Future date not accepted";
}
希望这有帮助。