Formats supportés de temps et de dates

Sommaire

Cette section décrit, dans un format de type BNF, tous les formats différents que l'analyseur de DateTimeImmutable, DateTime, date_create_immutable(), date_create(), date_parse(), et strtotime() est capable de comprendre. Les formats sont groupés par sections. Dans la plupart des cas, les formats de sections différentes, séparé par des caractères d'espacement blanc, des virgules ou des points, peuvent être utilisés dans la même chaîne date/moment. Pour chaque format supporté, un ou plusieurs exemples sont donnés ainsi qu'une description du format correspondant. Les caractères entre guillemets simples pour les formats sont insensibles à la casse ('t' pourrait s'écrire t ou T), les caractères écrits entre guillemets doubles, eux, sont sensibles à la casse ("T" et seulement T).

Pour formatter des objets DateTimeImmutable et DateTime, veuillez vous référer à la documentation de la méthode DateTimeInterface::format().

Un ensemble de règles générales devrait être pris en compte.

  1. L'analyseur, permet à chaque unité (année, mois, jour, heure, minute, seconde) la plage entière de valeurs. Pour une année c'est juste 4 chiffres, pour un mois c'est 0-12, pour un jour 0-31 et pour l'heure et les minutes c'est 0-59.
  2. 60 est autorisé pour les secondes, car parfois des chaînes de dates avec cette seconde intercalaire apparaisse. Mais PHP implémente le temps Unix où "60" n'est pas un nombre de secondes valides et ainsi overflow.
  3. strtotime() returns false si un des nombres et en-dehors de la plage, et DateTimeImmutable::__construct() lance une exception.
  4. Si une chaîne contient une date, tous les éléments sont remis à 0.
  5. Tous les éléments de temps moins significatifs sont remis à 0 si n'importe quel élément d'un temps est présent dans la chaîne donnée.
  6. L'analyseur est idiot, et n'effectue pas de vérification pour le rendre plus rapide (et plus générique).
  7. Il y a une vérification additionnelle si une date invalide est fourni :

    <?php
    $res
    = date_parse("2015-09-31");
    var_dump($res["warnings"]);
    ?>

    L'exemple ci-dessus va afficher :

    array(1) {
      [11] =>
      string(27) "The parsed date was invalid"
    }
    

  8. Il est déjà possible de gérer c'est cas spéciaux, mais l'utilisation de It is already possible to handle the edge cases, but then you need to use DateTimeImmutable::createFromFormat() est requis en fournissant le format voulu.

    <?php
    $res
    = DateTimeImmutable::createFromFormat("Y-m-d", "2015-09-34");
    var_dump($res);

    L'exemple ci-dessus va afficher :

    object(DateTimeImmutable)#1 (3) {
      ["date"] =>
      string(26) "2015-10-04 17:24:43.000000"
      ["timezone_type"] =>
      int(3)
      ["timezone"] =>
      string(13) "Europe/London"
    }