我真的不知道该如何解决这个问题。我的表单中有以下标记:
<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
的值,则它将完全不变。