-3

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

我已经为它编写了以下代码。

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

使用上面的代码,我不会收到未来日期的错误,有时我也会收到以前日期的错误。

如何优化并使这段代码正确和标准?

4

3 回答 3

5

如果发布的格式是 in m-d-Y,那么你不能直接用strtotime()函数将它转换为 unix 时间戳,因为它会返回false.

如果您需要使用strtotime()请将输入格式更改为m/d/Yby simplestr_replace()

另一方面,您可以使用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";
}

demo

如果您需要从 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

demo

于 2014-12-10T07:55:20.897 回答
-1

我认为您需要以“Ymd”或“dmY”格式比较日期。我认为无法以“mdY”格式比较日期

于 2014-12-10T06:44:24.137 回答
-1

由于我们已经对您的代码进行了更改,并且我们在我这边测试它是否有效,所以您可以在下面尝试。

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

希望这可以帮助。

于 2014-12-10T06:55:54.167 回答