我正在编辑我的控制器脚本,以使其运行得更快,线路更少。我有一个完全正常的版本,但修改后的版本不断出现此错误,它指向这一行:
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');
我无法找出问题所在......原始脚本(有效的脚本)看起来与此类似,并且工作完全正常
答案 0 :(得分:0)
请注意PHP的createFromFormat
函数returns FALSE on error。您可能需要检查$prodDate[3]
是否真的是一个日期。使用get_class
或instanceof
。
请进一步注意您的格式错误。它应该是:
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?