- ^ Références
- ^ Les classes utilitaires
- jApp : chemins de l'application
- jDateTime : manipulation de dates et heures
- jFile : lire ou créer des fichiers
- jFilter : vérification et filtrage de données
- jImageModifier: Modifier une image
- jMailer : envoi de mails
- jMessage : informations entre actions
- jSession : stockage de sessions
- jWiki : transformation de texte wiki
Section: jDateTime : manipulation de dates et heures
« jApp : chemins de l'application | ^ 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::LANG_SHORT_DTFORMAT | date et heure sans les secondes au format dans la langue actuelle de l'application |
jDateTime::LANG_SHORT_TFORMAT | heure sans les secondes 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 "YYYY-MM-DDTHH:mm:ssZ" |
jDateTime::RFC822_FORMAT | format RFC822 "D, d M y H:i:s O" |
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