now new formato fecha español date_format convertir change cambiar php datetime

formato - new datetime php



¿Por qué no puedo acceder a DateTime-> date en la clase DateTime de PHP? ¿Es un error? (4)

Usando la clase DateTime , si intento ejecutar el siguiente código.

$mydate = new DateTime(); echo $mydate->date;

Volveré con este mensaje de error

Notice: Undefined property: DateTime::$date...

Lo cual no tiene sentido porque cuando se ejecuta var_dump() en la variable $mydate , muestra claramente que esta propiedad existe y es de acceso público.

var_dump($mydate); object(DateTime)[1] public ''date'' => string ''2012-12-29 17:19:25'' (length=19) public ''timezone_type'' => int 3 public ''timezone'' => string ''UTC'' (length=3)

¿Es esto un error dentro de PHP o estoy haciendo algo mal? Estoy usando PHP 5.4.3.


Además de usar DateTime::format() , puedes acceder a la propiedad usando reflection:

<?php $dt = new DateTime(); $o = new ReflectionObject($dt); $p = $o->getProperty(''date''); $date = $p->getValue($dt));

Esto es levemente más rápido que usar format() porque format() formatea una cadena de tiempo que ya ha sido formateada. Especialmente si lo haces muchas veces en un bucle.

Sin embargo, este no es un comportamiento regular de PHP. Ya se ha enviado un informe de errores como @Nile mencionado en los comentarios anteriores.


Como se señala en las otras respuestas, es un problema con PHP que no se ha resuelto hasta el día de hoy, pero si es un ''efecto secundario'' de var_dump() no estoy tan seguro ...

echo ((array) new DateTime())[''date'']; // Works in PHP 7.

De lo que estoy seguro es de que si las propiedades de DateTime estuvieran destinadas a ser utilizadas por nosotros, estarían disponibles. Pero como muchas clases internas, no lo son y no debes confiar en los métodos "hacky" o "glitchy" para arreglar tu código. En su lugar, debes usar su API .

echo (new DateTime())->format(''Y-m-d H:i:s'');

Si no está satisfecho, puede extender la clase o tal vez usar Carbon que lo amplíe.

echo (new Carbon())->toDateTimeString();

Si crees cómo var_dump() crea una salida falsa de un objeto echa un vistazo a __debugInfo()


Este es un problema conocido .

La fecha de disponibilidad es en realidad un efecto secundario de la compatibilidad con var_dump() aquí - [email protected]

Por alguna razón, se supone que no puedes acceder a la propiedad, pero var_dump muestra de todos modos. Si realmente desea obtener la fecha en ese formato, use la función DateTime::format() .

echo $mydate->format(''Y-m-d H:i:s'');


Si solo usa un var_Dump antes de preguntar la fecha del inmueble, todo funciona bien:

$mydate = new DateTime(); var_Dump($mydate); echo ''<br>''; echo $mydate->date;

Esto ofrece:

object(DateTime)#1 (3) { ["date"]=> string(26) "2017-04-11 08:44:54.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "America/New_York" } 2017-04-11 08:44:54.000000

Entonces ves que la fecha de propiedad existe incluso para el objeto. No puedo entender este comportamiento. Simplemente comente el var_Dump y obtendrá el error nuevamente.