日期POST切换类型

时间:2018-10-03 16:30:09

标签: php datetime

我真的不知道该如何解决这个问题。我的表单中有以下标记:

<input class="form-control" type="date" name="renewal" required="required" id="renewal" />

,如果我呼叫var_dump,它会告诉我它是以Y-m-d格式格式化的日期的String值。但是,如果尝试使用以下命令将String转换为DateTime对象:

$_POST['renewal'] = new DateTime($_POST['renewal']);

我收到以下错误消息:

  

致命错误:未捕获的TypeError:DateTime :: __ construct()期望参数1为字符串,对象在* .php:212堆栈跟踪中指定:#0 * .php(212):DateTime-> __ construct(Object(DateTime ))#1 {main}在第212行的* .php中抛出

因此,如果我尝试使用strval将$_POST['renewal']显式转换为字符串:

$_POST['renewal'] = new DateTime(strval($_POST['renewal']));

我收到以下错误:

  

可恢复的致命错误:在第212行的* .php中,日期时间类的对象无法转换为字符串

如果我尝试使用以下方法从$_POST['renewal']获取格式:

$_POST['renewal'] = new DateTime($_POST['renewal']->format('Y-m-d'));

我收到以下错误:

  

致命错误:未捕获的错误:在* .php:212中的字符串上调用成员函数format()堆栈跟踪:#0 {main}在212行中的* .php中引发了

如果我尝试不对POST值进行任何操作,并尝试使用以下命令将日期的年份设置为今年的值:

$_POST['renewal'] = new DateTime($today->format('Y') . $_POST['renewal']->format('-m-d'));

我收到与成员函数错误相同的调用,如上所示。那么,为什么当我尝试将POST值转换为需要String而不是DateTime对象的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的值,则它将完全不变。

0 个答案:

没有答案