2017-08-03 74 views
0

我正在编辑我的控制器脚本,使其运行速度更快,行数更少。我有工作完全正常,但是修改后的版本不断想出这个错误版本,它指向这一行:PHP:调用布尔类型的成员函数格式()...什么

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

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

错误行之前的行:

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

所以我分裂一个字符串,找到为止。字符串格式为:xxx @ yyy date。我将它爆炸以找到'xxx',然后采用包含'yyy date'的爆炸阵列的[1]索引来查找'date'

当我回显$ prodDate [3 ],它会成功检索日期。然后,我想这个日期存储到我的MySQL表,所以当我使用

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

我无法找出问题的所在......这就是最初的剧本(正常工作的那个)类似于对此和它很好地工作

+0

检查的输出'''$ prodDate [3]'''因为它似乎对将导致错误。用字符串替换变量,它工作正常:'''echo datetime :: createFromFormat('md-Y','12 -23-2017') - > format('Ym-d');''' – MrMarlow

+1

如果它是显示日期并报告错误,错误必须与回显不同。 – Barmar

+0

如果'$ prodName [1]'包含'yyy date',那么日期应该在'$ prodDate [1]'中,而不是'$ prodDate [3]'。 – Barmar

回答

0

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

还请注意您的格式不正确。它应该是:

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

(第一个是不是“MDY”,它是“MDY”)

+0

当我回显$ prodDate [3]它说:“8-27-17” 在原始工作脚本上,我使用的变量还包含“8-27-17” 这个怎么不起作用? – arsenalftw067

+0

错误的格式。需要08-27-2017 - 否则你没有使用正确的格式变量; – MrMarlow

+0

我不认为这是问题所在。原始工作脚本成功地将“8-27-17”格式化为mysql日期,并将其输入到表 – arsenalftw067

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?

+0

我改变了你说的格式,使用'n-j-y' 错误仍然存​​在.. 但是,该条目正在成功添加到表中 – arsenalftw067

+0

然后其中一个变量可能不正确。没有看到你的脚本作为一个整体,有一个潜在的日期范围,我只是假设。也许这个月总是2位数字?你能确认一个月是否为0X格式?需要的格式,如果是这样的话,就是''n-m-y'''。如果可能的话,我们可以在范围内做更多的日期。 – MrMarlow

相关问题