Я сравниваю дату с текущей датой (то есть с сегодняшней датой). Ожидается, что ошибка должна появиться только тогда, когда сравниваемая дата больше сегодняшней. Он не должен приходить на дату, которая меньше или равна сегодняшней дате.
Я написал следующий код для этого.
$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
, то вы не можете конвертировать его в метку времени Unix напрямую с strtotime()
функция, потому что это вернусь false
.
Если вам нужно использовать strtotime()
затем изменить формат ввода на m/d/Y
простым str_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";
}
Если вам нужно извлечь некоторую информацию из объектов 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";
}
Надеюсь это поможет.