无法使用DateTime :: createFromFormat提取年份

时间:2019-05-08 10:23:29

标签: php laravel laravel-5.2

我正在尝试提取输入日期的年份,例如

$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>

在我的表中,startDate列是一个日期时间,例如“ 2017-10-26 00:00:00.000”,而refyear是一个int(2017)。

2 个答案:

答案 0 :(得分:1)

您可以改用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");

答案 1 :(得分:1)

根据文档DateTime :: createFromFormat:

  

失败时返回新的DateTime实例或FALSE。

这就是为什么要以布尔值调用它的原因,因为该值是false。

您的格式似乎正确,这意味着createFromFormat无法处理您的$start。您输入的内容与格式不符,请确保其匹配。

以下示例有效:

echo (DateTime::createFromFormat("Y-m-d H:i:s", "2019-01-01 12:30:30"))->format("Y"); // result: 2019
@ p @ jeprubio来自评论是正确的。 -添加毫秒以匹配您的给定格式:

echo DateTime::createFromFormat("Y-m-d H:i:s.u", "2017-10-26 00:00:00.000")->format("Y"); // 2017