Типы переключения даты POST - PullRequest
       0

Типы переключения даты POST

0 голосов
/ 03 октября 2018

Я действительно не знаю, как уточнить эту проблему.У меня есть следующая разметка в моей форме:

<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, оно не изменится вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...