- ^ Références
- ^ Les classes utilitaires
- jDateTime : manipulation de dates et heures
- jFile : lire ou créer des fichiers
- jFilter : vérification et filtrage de données
- jHttp : faire des requête HTTP
- jImageModifier: Modifier une image
- jIniFileModifier: lire ou modifier des fichiers de configuration (ini)
- jMailer : envoi de mails
- jMessage : informations entre actions
- jSession : stockage de sessions
- jWiki : transformation de texte wiki
Section: jDateTime : manipulation de dates et heures
^ Les classes utilitaires | jFile : lire ou créer des fichiers » |
− Table des matières
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("2006-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("2006-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("2006-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 2006-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 2006-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("2006-04-10",jDateTime::DB_DFORMAT);
$dt2 = new jDateTime();
$dt2->setFromString("2006-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("2006-04-10",jDateTime::DB_DFORMAT);
$dt2 = new jDateTime();
$dt2->setFromString("2006-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