Я действительно не знаю, как уточнить эту проблему.У меня есть следующая разметка в моей форме:
<input class="form-control" type="date" name="renewal" required="required" id="renewal" />
, и если я вызываю var_dump
, это говорит мне, что это строковое значение даты, отформатированной в формате Y-m-d
.Однако, если я пытаюсь преобразовать строку в объект DateTime, используя следующее:
$_POST['renewal'] = new DateTime($_POST['renewal']);
, я получаю следующее сообщение об ошибке:
Неустранимая ошибка: Uncaught TypeError: DateTime:: __ construct () ожидает, что параметр 1 будет строкой, объект задан в * .php: 212 Трассировка стека: # 0 * .php (212): DateTime -> __ construct (Object (DateTime)) # 1 {main}, добавленный в *.php в строке 212
Поэтому, если я пытаюсь явно преобразовать $_POST['renewal']
в строку, используя strval:
$_POST['renewal'] = new DateTime(strval($_POST['renewal']));
, я получаю следующую ошибку:
Исправимая фатальная ошибка: объект класса DateTime не может быть преобразован в строку в * .php в строке 212
И если я пытаюсь получить формат из $_POST['renewal']
, используя:
$_POST['renewal'] = new DateTime($_POST['renewal']->format('Y-m-d'));
Я получаю следующую ошибку:
Неустранимая ошибка: необученная ошибка: вызов функции-члена format () для строки в * .php: 212 Трассировка стека: # 0 {main} добавляется * .php в строку 212
И если я пытаюсь ничего не делать со значением POST и пытаюсь установитьдата года к значению этого года, используя следующее:
$_POST['renewal'] = new DateTime($today->format('Y') . $_POST['renewal']->format('-m-d'));
Я получаю тот же вызов ошибки функции-члена, как показано выше.Итак, почему он говорит мне, когда я пытаюсь преобразовать значение POST в объект DateTime, что он ожидает String, а не объект DateTime, но всякий раз, когда я пытаюсь использовать значение в качестве объекта DateTime, он говорит, что объект является String?
ОБНОВЛЕНИЕ
Чтобы показать вам, что я пытаюсь сделать, я пытаюсь определить, больше ли значение $_POST['renewal']
, чем сегодняшняя дата.Если значение POST больше, чем сегодняшняя дата, тогда я изменяю значение на сегодняшний год, а если значение все еще не превышает сегодняшнюю дату, то я также добавляю 6 месяцев к дате.Вот код, который я пытаюсь использовать:
$today = new DateTime("now");
$_POST['renewal'] = new DateTime($_POST['renewal']->format('Y-m-d'));
if ($_POST['renewal'] < $today) {
$_POST['renewal'] = new DateTime($today->format('Y') . $_POST['renewal']->format('-m-d'));
if ($_POST['renewal'] < $today) {
date_add($_POST['renewal'], date_interval_create_from_date_string('6 months'));
}
}
Значение, которое я использую для проверки кода, составляет 2016-06-28
, и я ожидаю, что оно изменится на 2018-06-28
и затем снова до 2018-12-28
.Но если я отправлю значение 2017-11-01
, оно изменится на 2018-11-01
, а если я отправлю значение 2018-12-01
, оно не изменится вообще.