无法使用 DateTime::createFromFormat 提取年份
Can not extract year with DateTime::createFromFormat
我正在尝试提取输入日期的年份,例如
$start = $request->input('start');
$refYear = DateTime::createFromFormat("Y-m-d H:i:s", $start)->format("Y");
但我遇到了错误 Call to a member function format() on boolean
,我看到了另一个答案,但到目前为止没有任何结果。
在我的页面中开始定义为输入
<input id="start" type="text" name="start" class="date-type"
placeholder="dd-mm-aaaa"><i class="fi-calendar" style="top: 2px;"></i>
在我的 table 中,startDate 列是一个日期时间,例如“2017-10-26 00:00:00.000”,refyear 是一个 int (2017)。
您可以尝试使用 Carbon
代替:
$refYear = Carbon::createFromFormat("Y-m-d H:i:s", $start)->format("Y");
但是根据您的日期字段示例,您还缺少 .u
格式错误。你应该使用这个:
$refYear = Carbon::createFromFormat("Y-m-d H:i:s.u", $start)->format("Y");
根据文档 DateTime::createFromFormat:
Returns a new DateTime instance or FALSE on failure.
这就是您在布尔值上调用它的原因,因为值为假。
您的格式似乎是正确的,这意味着 createFromFormat
无法处理您的 $start
。您输入的内容与您的格式不符,请确保匹配。
以下示例有效:
echo (DateTime::createFromFormat("Y-m-d H:i:s", "2019-01-01 12:30:30"))->format("Y"); // result: 2019
@jeprubio 来自评论是正确的顺便说一句。 - 添加毫秒以匹配您给定的格式:
echo DateTime::createFromFormat("Y-m-d H:i:s.u", "2017-10-26 00:00:00.000")->format("Y"); // 2017
我正在尝试提取输入日期的年份,例如
$start = $request->input('start');
$refYear = DateTime::createFromFormat("Y-m-d H:i:s", $start)->format("Y");
但我遇到了错误 Call to a member function format() on boolean
,我看到了另一个答案,但到目前为止没有任何结果。
在我的页面中开始定义为输入
<input id="start" type="text" name="start" class="date-type"
placeholder="dd-mm-aaaa"><i class="fi-calendar" style="top: 2px;"></i>
在我的 table 中,startDate 列是一个日期时间,例如“2017-10-26 00:00:00.000”,refyear 是一个 int (2017)。
您可以尝试使用 Carbon
代替:
$refYear = Carbon::createFromFormat("Y-m-d H:i:s", $start)->format("Y");
但是根据您的日期字段示例,您还缺少 .u
格式错误。你应该使用这个:
$refYear = Carbon::createFromFormat("Y-m-d H:i:s.u", $start)->format("Y");
根据文档 DateTime::createFromFormat:
Returns a new DateTime instance or FALSE on failure.
这就是您在布尔值上调用它的原因,因为值为假。
您的格式似乎是正确的,这意味着 createFromFormat
无法处理您的 $start
。您输入的内容与您的格式不符,请确保匹配。
以下示例有效:
echo (DateTime::createFromFormat("Y-m-d H:i:s", "2019-01-01 12:30:30"))->format("Y"); // result: 2019
@jeprubio 来自评论是正确的顺便说一句。 - 添加毫秒以匹配您给定的格式:
echo DateTime::createFromFormat("Y-m-d H:i:s.u", "2017-10-26 00:00:00.000")->format("Y"); // 2017