Convertir DateTime en chaîne PHP

225

J'ai déjà étudié beaucoup de sites sur la façon de convertir un objet PHP DateTime en chaîne. Je vois toujours "String to DateTime" et non "DateTime to String"

PHP DateTime peut être répercuté, mais ce que je veux traiter mon DateTime avec des fonctions de chaîne PHP.

Ma question est de savoir comment créer un objet PHP dateTime avec une chaîne à partir de ce type de code:

$dts = new DateTime(); //this returns the current date time
echo strlen($dts);
Netorica
la source
2
Pourquoi voulez-vous traiter votre DateTime avec des fonctions de chaîne? Qu'est-ce que vous essayez d'accomplir?
mgiuffrida
2
une sorte de validateur datetime? en php
Netorica

Réponses:

413

Vous pouvez utiliser la formatméthode de la DateTimeclasse:

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

Si formatéchoue pour une raison quelconque, il reviendra FALSE. Dans certaines applications, il peut être judicieux de gérer le cas défaillant:

if ($result) {
  echo $result;
} else { // format failed
  echo "Unknown Time";
}
rjz
la source
3
+1 Ça marche. Pouvez-vous également indiquer comment vérifier la valeur null (sur la même ligne) avant d'effectuer cette conversion. Merci!
Watt
2
Hé @Watt, bon point! J'ai développé l'exemple pour montrer comment le cas défaillant peut être traité.
rjz
3
vous avez oublié le fuseau horaire, utilisez plutôt $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
de quelle instruction d'utilisation avez-vous besoin pour pouvoir utiliser -> format? Il dit qu'il manque quelque chose dans Zend
Chemist
1
Vous pouvez utiliser ce formulaire plus court $result = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s');depuis PHP 5.4. Regardez ici: docs.php.net/manual/en/migration54.new-features.php L' accès des membres de classe sur l'instanciation a été ajouté, par exemple (new Foo) -> bar ().
FFirmenich
17

Le moyen le plus simple que j'ai trouvé est:

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

J'espère que ça aide.

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

Il existe des formats prédéfinis date_d.phpà utiliser avec formatcomme:

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

Utilisez comme ceci:

$date = new \DateTime();
$string = $date->format(DATE_RFC2822);
Glauco Neves
la source
3
Vous pouvez utiliser une constante de DateTime (par exemple DateTime :: ISO8601), cela rend le code plus facile à lire.
Anh-Tuan Mai
2

Manière plus courte en utilisant la liste. Et vous pouvez faire ce que vous voulez avec chaque composant de date.

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

Cela a fonctionné pour moi

$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
la source