2017-08-03 4 views
0

Je suis en train d'éditer mon script de contrôleur pour le faire fonctionner plus vite, avoir moins de lignes. J'ai une version qui fonctionne tout à fait bien, mais la version modifiée revient sans cesse avec cette erreur, et il pointe à cette ligne:PHP: Appel à un format de fonction membre() sur booléen ... quoi

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

Il est bizarre que la page affiche la date, puis appelez l'erreur. Ainsi, l'écho fonctionnera, mais il est dit que l'erreur est sur cette ligne ...

Les lignes avant la ligne d'erreur:

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

donc je partage une chaîne pour trouver la date. Le format de chaîne va: xxx @ yyy date. Je l'explose pour trouver le 'xxx', puis je prends l'index [1] du tableau éclaté, qui contient 'yyy date' pour trouver seulement la 'date'

Quand je résonne $ prodDate [3 ], il récupère la date avec succès. Ensuite, je veux conserver cette date dans ma table mysql, donc ce que j'utilise

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

Je ne peux pas savoir où le problème est ... le script original (celui qui fonctionne) ressemble à ceci et cela fonctionne complétement bien

+0

Vérifiez la sortie de '' 'prodDate $ [3]' '' car il semble causer une erreur sur ce point. Remplacez la variable par une chaîne et cela fonctionne bien: '' 'echo Datetime :: createFromFormat ('md-Y', '12 -23-2017 ') -> format (' Ym-d ');' '' – MrMarlow

+1

Si c'est montrant la date et signalant ensuite l'erreur, l'erreur doit se trouver sur une ligne différente de l'écho. – Barmar

+0

Si '$ prodName [1]' contient 'yyy date', alors la date devrait être dans' $ prodDate [1] ', pas' $ prodDate [3] '. – Barmar

Répondre

0

Notez que PHP createFromFormat fonctionne returns FALSE on error. Vous devrez peut-être vérifier si $prodDate[3] est vraiment une date. Utilisez get_class ou instanceof.

Notez également que votre format est incorrect. Il devrait être:

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

(Le premier n'est pas "MDY" il est "MDY")

+0

Lorsque je fais écho $ prodDate [3] il est dit: "8-27-17" Sur le script de travail original, la variable que j'utilise contient aussi "8-27-17" Comment ça se fait que ça ne marche pas? – arsenalftw067

+0

Mauvais format. Doit être 08-27-2017 - sinon vous n'utilisez pas les bonnes variables de format; – MrMarlow

+0

Je ne pense pas que ce soit le problème. Le script de travail original prend avec succès "8-27-17" et le met en forme à mysql Date, et l'introduit dans la table – arsenalftw067

0

Dans un commentaire que vous avez posté que votre variable date retourne effectivement 8-27-17

En raison de cela, vous devez changer les définitions de caractères dans le format à être

n-j-y 

Comme ainsi;

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

Si vous exécutez avec le format incorrect, vous obtenez les éléments suivants

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

En raison du format erroné, le retour serait false - ce qui signifie que vous essayez de formater un booléen, d'où l'erreur .

Précédemment été discutée ici aussi - la réponse du haut a répliqué ceci, pour la plupart.

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

+0

J'ai changé le format comme vous l'avez dit, en utilisant 'n-j -y' L'erreur est toujours là .. Cependant, l'entrée est ajoutée avec succès dans la table – arsenalftw067

+0

Ensuite, l'une des variables peut être incorrecte. Sans voir votre script dans son ensemble, avec une gamme potentielle de dates, je ne ferais que supposer. Peut-être que le mois est TOUJOURS 2 chiffres? Pouvez-vous confirmer si un mois est au format 0X? Le format requis, s'il en est ainsi, serait '' 'n-m-y'''. Nous pourrions vraiment faire d'autres dates dans la gamme, si possible. – MrMarlow