为将日期与今天的日期进行比较而编写的代码中有什么问题


What's the issue in a code written for comparing the date with today's date?

我正在比较日期与当前日期(即今天的日期)。预计只有当要比较的日期大于今天的日期时,才会出现错误。它不应该是小于或等于今天的日期的日期。

我为它编写了以下代码。

$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";
}

希望这有帮助。