Convertir fecha y hora en cadena PHP

Ya he investigado mucho en el sitio sobre cómo puedo convertir el objeto PHP DateTime a String. Siempre veo "String to DateTime" y no "DateTime to String"

Se puede hacer eco de PHP DateTime, pero lo que quiero es procesar mi DateTime con funciones de cadena de PHP.

Mi pregunta es ¿cómo puedo hacer que PHP dateTime Object sea una cadena a partir de este tipo de código?

$dts = new DateTime(); //this returns the current date time
echo strlen($dts);

preguntado el 13 de mayo de 12 a las 04:05

¿Por qué quiere procesar su DateTime con funciones de cadena? ¿Qué estás tratando de lograr? -

¿Algún tipo de validador de fecha y hora? en php-

6 Respuestas

Puede utilizar el format método de la DateTime clase:

$date = new DateTime('2000-01-01');
$result = $date->format('Y-m-d H:i:s');

If format falla por alguna razón, volverá FALSE. En algunas aplicaciones, podría tener sentido manejar el caso fallido:

if ($result) {
  echo $result;
} else { // format failed
  echo "Unknown Time";
}

Respondido el 03 de diciembre de 12 a las 19:12

+1 Funciona. ¿Puede decirnos también cómo verificar si hay un valor nulo (en la misma línea) antes de realizar esta conversión? ¡Gracias! - Vatio

Hola @Watt, ¡buen punto! He ampliado el ejemplo para mostrar cómo se puede manejar el caso fallido. - rjz

olvidaste la zona horaria, en su lugar usa $date->format('c') or $date->format('Y-m-d H:i:s Z') or $date->format('Y-m-d H:i:s T') - Timo Huovinen

¿Qué declaración de uso necesita para poder usar -> formato? Dice que falta algo en Zend - Químico

Puedes usar esta forma más corta $result = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s'); desde PHP 5.4. Mira aquí: docs.php.net/manual/en/migration54.new-features.php Se ha agregado el acceso de los miembros de la clase en la creación de instancias, por ejemplo, (nuevo Foo) -> bar (). - Firmenich

echo date_format($date,"Y/m/d H:i:s");

Respondido 13 ago 15, 08:08

La forma más sencilla que encontré es:

$date   = new DateTime(); //this returns the current date time
$result = $date->format('Y-m-d-H-i-s');
echo $result . "<br>";
$krr    = explode('-', $result);
$result = implode("", $krr);
echo $result;

Espero que ayude.

Respondido 23 Oct 18, 10:10

Hay algunos formatos predefinidos en date_d.php para usar con format me gusta:

define ('DATE_ATOM', "Y-m-d\TH:i:sP");
define ('DATE_COOKIE', "l, d-M-y H:i:s T");
define ('DATE_ISO8601', "Y-m-d\TH:i:sO");
define ('DATE_RFC822', "D, d M y H:i:s O");
define ('DATE_RFC850', "l, d-M-y H:i:s T");
define ('DATE_RFC1036', "D, d M y H:i:s O");
define ('DATE_RFC1123', "D, d M Y H:i:s O");
define ('DATE_RFC2822', "D, d M Y H:i:s O");
define ('DATE_RFC3339', "Y-m-d\TH:i:sP");
define ('DATE_RSS', "D, d M Y H:i:s O");
define ('DATE_W3C', "Y-m-d\TH:i:sP");

Usar así:

$date = new \DateTime();
$string = $date->format(DATE_RFC2822);

Respondido el 06 de Septiembre de 16 a las 20:09

Puede usar la constante de DateTime (por ejemplo, DateTime::ISO8601), hace que el código sea más fácil de leer. - Anh Tuan Mai

Manera más corta usando la lista. Y puedes hacer lo que quieras con cada componente de fecha.

list($day,$month,$year,$hour,$min,$sec) = explode("/",date('d/m/Y/h/i/s'));
echo $month.'/'.$day.'/'.$year.' '.$hour.':'.$min.':'.$sec;

Respondido el 30 de Septiembre de 17 a las 03:09

Ha funcionado para mi

$start_time   = date_create_from_format('Y-m-d H:i:s', $start_time);
$current_date = new DateTime();
$diff         = $start_time->diff($current_date);
$aa           = (string)$diff->format('%R%a');
echo gettype($aa);

Respondido 23 Oct 18, 10:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.