Formats supportés de temps et de dates

Sommaire

Cette section décrit 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).

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 
    DateImmutable::createFromFormat("Y-m-d""2015-09-34");
    var_dump($res);

    L'exemple ci-dessus va afficher :

    class DateTime#1 (3) {
      public $date =>
      string(26) "2015-10-04 17:24:43.000000"
      public $timezone_type =>
      int(3)
      public $timezone =>
      string(13) "Europe/London"
    }