Raccourcis : Contenu - rubriques - sous rubriques
EN FR

jDateTime est une classe encapsulant une date, permettant de la convertir dans divers formats, mais aussi de faire des calculs de dates.

Pour créer un objet jDateTime, on peut :

  • soit passer les valeurs de la date par le constructeur : l'année, le mois, le jour, l'heure, les minutes et les secondes. Toutes ces valeurs sont facultatives et doivent être des entiers.
  • soit l'instancier sans paramètre et utiliser la méthode setFromString pour l'initialiser à partir d'une chaîne contenant une date et/ou une heure.

Note : pour vos calculs de dates, préférez l'utilisation de l'objet DateTime de PHP, apparu dans PHP 5.2. jDatetime ayant des limitations (ne travaille pas avec des dates inférieures au 01/01/1970).

Récupérer la date courante

La méthode now permet à l'objet jDateTime de récupérer la date courante.

Exemple :


  $dt = new jDateTime();

  $dt->now();

  $date = $dt->toString(jDateTime::LANG_DFORMAT);

$date vaut la date courante formatée dans la langue de l'application.

Conversion à partir d'une chaîne

La méthode setFromString prend en argument la chaîne en question et un indicateur de format. Ces indicateurs sont des valeurs numériques qui sont récupérables via des constantes de classe.

jDateTime reconnait les formats suivants :

constantes de classe format
jDateTime::LANG_DFORMAT date au format dans la langue actuelle de l'application (en fr, ce sera jj/mm/aaaa)
jDateTime::LANG_DTFORMAT date et heure au format dans la langue actuelle de l'application
jDateTime::LANG_TFORMAT heure au format dans la langue actuelle de l'application
jDateTime::DB_DFORMAT date au format base de données classique : "AAAA-MM-JJ"
jDateTime::DB_DTFORMAT date et heure au format base de données classique : "AAAA-MM-JJ HH:mm:SS"
jDateTime::DB_TFORMAT heure au format base de données classique : "HH:mm:SS"
jDateTime::ISO8601_FORMAT format ISO8601
jDateTime::TIMESTAMP_FORMAT simple entier, indiquant le nombre de secondes depuis le 1/1/1970
jDateTime::FULL_LANG_DATE date au format complet (jour de la semaine et mois en toute lettre) en tenant compte de la langue

Pour les formats LANG_*, jDateTime se base sur ce qui est indiqué dans le fichier de locales "format" situé dans le module jelix, et correspondant à la langue courante configurée dans Jelix.

Exemple :


  $dt = new jDateTime();

  $dt->setFromString("2017-04-10",jDateTime::DB_DFORMAT);

  echo "la date est ", $dt->year, ",", $dt->month, ",", $dt->day, ",", $dt->hour, ",", $dt->minute, ",", $dt->second;

Vous aurez remarqué les propriétés qui permettent de connaître chaque élément de la date.

On peut aussi, plutôt que spécifier à chaque fois le format, définir un format par défaut via la propriété defaultFormat.


  $dt = new jDateTime();
  $dt->defaultFormat = jDateTime::DB_DFORMAT;

  $dt->setFromString("2017-04-10");

Conversion vers une chaîne

Pour convertir une date en chaîne, il y a la méthode toString qui accepte en paramètre facultatif l'identifiant de format dans lequel on veut l'avoir.


  $dt->toString(jDateTime::LANG_DFORMAT);

Calcul de dates

Avec les méthodes sub() et add(), il est possible d'ajouter ou d'enlever des durées à une date. Ces durées sont à indiquer via un objet jDuration.


  $dt = new jDateTime();
  $dt->setFromString("2017-04-10",jDateTime::DB_DFORMAT);

  // on veut retirer deux jours
  $duration = new jDuration(array('day'=>2));
  $dt->sub($duration);
  echo $dt->toString(jDateTime::DB_DFORMAT); // affiche 2017-04-08

  // on veut ajouter 27h15 heures
  $duration = new jDuration(array('hour'=>27,'minute'=>15));
  $dt->add($duration);
  echo $dt->toString(jDateTime::DB_DTFORMAT); // affiche 2017-04-09 03:15:00

Si on veut savoir la durée entre deux dates, on utilise alors la méthode durationTo(), qui renvoie cette durée dans un objet jDuration :


  $dt = new jDateTime();
  $dt->setFromString("2017-04-10",jDateTime::DB_DFORMAT);

  $dt2 = new jDateTime();
  $dt2->setFromString("2017-04-12",jDateTime::DB_DFORMAT);

  // calcul la durée entre $dt jusqu'à $dt2
  $duration = $dt->durationTo($dt2);
  echo $duration->months, ' ', $duration->days, ' ', $duration->seconds;

Attention, les dates doivent être supérieures au 01/01/1970.

Il est à présent possible de faire des soustractions de dates via la methode substract() qui prend et retourne une jDateTime.

Comparaison de dates

Pour comparer deux dates, il y a la méthode compareTo()


  $dt = new jDateTime();
  $dt->setFromString("2017-04-10",jDateTime::DB_DFORMAT);

  $dt2 = new jDateTime();
  $dt2->setFromString("2017-04-12",jDateTime::DB_DFORMAT);

  $result = $dt->compareTo($dt2);

compareTo renvoie :

  • -1 si $dt < $dt2
  • 0 si les deux dates sont égales
  • 1 si $dt > $dt2