Sé que esto ha sido golpeado hasta la muerte aquí, y he leído todas las publicaciones a lo largo de los años, pero no puedo encontrar una solución. Estoy tratando de reorganizar una fecha y he usado varios métodos, pero sigo recibiendo este error.

$dateMDY    = trim($dateTime2[1]);
$dateMDYp   = preg_replace("~(.*?)/(.*?)/(.*?)~", "$1-$2-$3", $dateMDY);

echo "dateMDY: '".$dateMDY."'<br /><br /><br />\n";
echo "dateMDYp: '".$dateMDYp."'<br /><br /><br />\n";

$dt = DateTime::createFromFormat('n/j/y', '12/2/17');
echo "dt: '".$dt->format('Y-m-d')."'<br />\n"; 
$dt2 = DateTime::createFromFormat('n-j-y', '12-2-17');
echo "dt2: '".$dt2->format('Y-m-d')."'<br />\n";
$dt3 = DateTime::createFromFormat('n/j/y', $dateMDY);
echo "dt3: '".$dt3->format('Y-m-d')."'<br />\n";
$dt4 = DateTime::createFromFormat('n-j-y', $dateMDYp);
echo "dt4: '".$dt4->format('Y-m-d')."'<br />\n";

Esto arroja lo siguiente:

dateMDY: '12/2/17'
dateMDYp: '12-2-17'
dt: '2017-12-02'
dt2: '2017-12-02'

( ! ) Fatal error: Uncaught Error: Call to a member function format() on boolean

Debo estar perdiendo algo muy simple, ya que DateTime :: tiene que estar enviando false por alguna razón, sin embargo, el formato que se repite cuando llamo a la variable muestra el número correcto.

PHP v.7.1.0

0
B Barry 21 jul. 2020 a las 16:38

2 respuestas

La mejor respuesta

Okay. He resuelto el problema. Comencé var_dump-ing todas las variables hasta que noté algo ...

C:\wamp64\www\a\datetime.php:47:string '12/2/17</URD>' (length=13)

Mientras que print y echo solo muestran '12 / 2/17 ', var_dump muestra los datos finales "", que es una etiqueta que tengo en la tabla de la base de datos desde la que llamo. No estoy seguro de por qué los datos completos no se muestran en print o echo, pero un simple str_replace a mi variable $ dateMDY eliminó lo invisible y ahora imprime el formato correcto.

¡Esperemos que esto pueda ayudar a alguien en el futuro que pueda estar rascándose la cabeza ante la conexión de datos invisibles a sus variables!

Gracias a @Mehrdad Dastgir por iluminar una idea para mí.

0
B Barry 21 jul. 2020 a las 15:06

DateTime::createFromFormat devuelve false por error (más aquí).

Es por eso que cuando llamas a ->format obtienes

Call to a member function format() on boolean

Para ver el error puede llamar a DateTime::getLastErrors. (DateTime :: getLastErrors)

0
Mehrdad Dastgir 21 jul. 2020 a las 13:53