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

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

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.



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

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;

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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.