PHP:在boolean上调用成员函数format()...什么

时间:2017-08-03 22:14:10

标签: php mysql opencart

我正在编辑我的控制器脚本,以使其运行得更快,线路更少。我有一个完全正常的版本,但修改后的版本不断出现此错误,它指向这一行:

echo Datetime::createFromFormat('m-d-Y',$prodDate[3])->format('Y-m-d');

页面将显示日期,然后调用错误,这很奇怪。所以回声会运行,但它说错误在这一行......

错误行之前的行:

$prodName = explode("@", $product['name']);
$prodDate = explode(" ",$prodName[1]);

所以我分裂一个字符串来查找日期。字符串格式为:xxx @ yyy date。我将其展开以找到' xxx',然后获取爆炸数组的[1]索引,其中包含' yyy date'找到' date'

当我回显$ prodDate [3]时,它成功检索了日期。然后,我想将这个日期存储到我的mysql表中,这样当我使用

 echo Datetime::createFromFormat('m-d-Y',$prodDate[3])->format('Y-m-d');

我无法找出问题所在......原始脚本(有效的脚本)看起来与此类似,并且工作完全正常

2 个答案:

答案 0 :(得分:0)

请注意PHP的createFromFormat函数returns FALSE on error。您可能需要检查$prodDate[3]是否真的是一个日期。使用get_classinstanceof

请进一步注意您的格式错误。它应该是:

echo Datetime::createFromFormat('m-d-y',$prodDate[3])->format('Y-m-d');

(第一个不是“m-d-Y”,而是“m-d-y”)

答案 1 :(得分:0)

在评论中,您发布了日期变量实际返回8-27-17

因此,您需要将格式中的字符定义更改为

n-j-y

像这样;

echo Datetime::createFromFormat('n-j-y', '8-23-17')->format('Y-m-d');
// Returns 2017-08-23

如果使用不正确的格式运行,则会得到以下内容

echo Datetime::createFromFormat('m-d-Y', '8-23-17')->format('Y-m-d'); 
// Returns 0017-08-23

由于格式错误,返回值为false - 意味着您正在尝试格式化布尔值,因此错误。

此前也在这里进行过讨论 - 最重要的是答案在大多数情况下重复了这一点。

Why does DateTime::createFromFormat() fails and returns a boolean in my second example?