无法使用 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