Convierta DateTime a String PHP


225

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

PHP DateTime se puede repetir, pero lo que quiero procesar es DateTime con funciones de cadena PHP.

Mi pregunta es cómo puedo hacer PHP dateTime Object en una cadena a partir de este tipo de código:

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

2
¿Por qué quieres procesar tu DateTime con funciones de cadena? ¿Qué estás tratando de lograr?
mgiuffrida

2
algún tipo de validador de fecha y hora? en php
Netorica

Respuestas:


413

Puedes usar el formatmétodo de la DateTimeclase:

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

Si formatfalla por alguna razón, volverá FALSE. En algunas aplicaciones, puede tener sentido manejar el caso erróneo:

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

3
+1 Funciona. ¿Puede indicar también cómo verificar nulo (en la misma línea) antes de realizar esta conversión. ¡Gracias!
Watt

2
Hola @Watt, buen punto! He ampliado el ejemplo para mostrar cómo se podría manejar el caso que falla.
rjz

3
olvidó la zona horaria, en su lugar use $date->format('c')o $date->format('Y-m-d H:i:s Z')o$date->format('Y-m-d H:i:s T')
Timo Huovinen

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

1
Puede usar esta forma más corta $result = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s');desde PHP 5.4. Mire aquí: docs.php.net/manual/en/migration54.new-features.php Se ha agregado el acceso de los miembros de la clase en la
FFirmenich

17

La forma más simple 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.



15

Hay algunos formatos predefinidos date_d.phppara usar con format:

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);

3
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

2

Forma más corta usando la lista. Y puede hacer lo que quiera 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;

2

Me funcionó

$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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.