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);
Netorica
fuente
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";
}
rjz
fuente
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.

velero
fuente
15
echo date_format($date,"Y/m/d H:i:s");
Dhawal Naik
fuente
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);
Glauco Neves
fuente
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;
lisandro
fuente
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);
sumar sharma
fuente