Conversão DateTime para String PHP

225

Eu já pesquisei muitos sites sobre como converter o objeto PHP DateTime em String. Eu sempre vejo "String to DateTime" e não "DateTime to String"

PHP DateTime pode ser repetido, mas o que eu quero processar meu DateTime com funções de string PHP.

Minha pergunta é como posso criar o PHP dateTime Object para uma string iniciando neste tipo de código:

$dts = new DateTime(); //this returns the current date time
echo strlen($dts);
Netorica
fonte
2
Por que você deseja processar seu DateTime com funções de string? O que você está tentando realizar?
Mgiuffrida #
2
algum tipo de validador de data e hora? em php
Netorica 13/05

Respostas:

413

Você pode usar o formatmétodo da DateTimeclasse:

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

Se formatfalhar por algum motivo, ele retornará FALSE. Em alguns aplicativos, pode fazer sentido lidar com o caso com falha:

if ($result) {
  echo $result;
} else { // format failed
  echo "Unknown Time";
}
rjz
fonte
3
+1 Funciona. Você também pode indicar como procurar nulos (na mesma linha) antes de fazer essa conversão. Obrigado!
Watt
2
Hey @Watt, bom ponto! Expandi o exemplo para mostrar como o caso com falha pode ser tratado.
Rjz 03/12
3
você esqueceu o fuso horário, em vez de usar $date->format('c')ou $date->format('Y-m-d H:i:s Z')ou$date->format('Y-m-d H:i:s T')
Timo Huovinen
1
que declaração de uso você precisa para poder usar -> formato? Ele diz que falta alguma coisa no Zend #
Chemist
1
Você pode usar este formato mais curto $result = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s');desde o PHP 5.4. Assista aqui: docs.php.net/manual/en/migration54.new-features.php O acesso de membro da classe na instanciação foi adicionado, por exemplo, (novo Foo) -> bar ().
FFirmenich 06/04/19
17

A maneira mais simples que encontrei é:

$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 ajude.

veleiro
fonte
15
echo date_format($date,"Y/m/d H:i:s");
Dhawal Naik
fonte
15

Existem alguns formatos predefinidos date_d.phppara usar formatcomo:

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

Use assim:

$date = new \DateTime();
$string = $date->format(DATE_RFC2822);
Glauco Neves
fonte
3
Você pode usar a constante DateTime (por exemplo, DateTime :: ISO8601), isso facilita a leitura do código.
Anh-Tuan Mai
2

Caminho mais curto usando a lista. E você pode fazer o que quiser com cada componente de data.

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

Funcionou para mim

$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);
sumit sharma
fonte