V. Développer avec PHPBoost

Traitement des dates

Dernière mise à jour : 16/02/2016 à 15h58
PHPBoost possède une classe permettant d'effectuer plusieurs traitements sur les dates. Nous allons vous la présenter au cours de cet article.

La classe va vous permettre de formater une date dans différents référentiels horaires et de récupérer plusieurs informations dessus.

Les référentiels temporels




Dans un monde internationnal tel qu'Internet, des gens de toutes les nationnalités et de tous les pays se retrouvent sur un même site, donc le serveur peut être basé n'importe où. Il est donc important d'adapter les dates à l'utilisateur (et notamment à son fuseau horaire). Cette classe gère aussi le changement d'heure (heure d'été/ heure d'hiver).

Les différents référentiels




La classe Date gère la notion de fuseau horaire à partir de différents référentiels qui sont les suivants :

  • L'heure système (ou l'heure du serveur). Toutes les données manipulées par l'application doivent être en heure système. En interne, la classe Date manipule le temps selon le référentiel du système, et tout enregistrement dans la base de données ou dans un fichier quelconque doit se faire dans ce référentiel. Cela permet d'avoir des données homogènes. Ce fuseau horaire est donné automatiquement par le serveur.
  • L'heure du site. Elle est dans le fuseau horaire de l'endroit où est localisé le site. Par exemple un site français sera à l'heure française, c'est à dire en GMT + 1 en hiver. Cette référence sera par ailleurs utilisée pour les invités (visiteurs non enregistrés). Le fuseau horaire du site est choisi par l'administrateur.
  • L'heure de l'utilisateur. Chaque utilisateur enregistré choisit son fuseau horaire, les autres auront le référentiel par défaut, à savoir celui du site.


Quel référentiel utiliser ?




Voilà ce qu'il est important de retenir.

L'affichage d'une date se fait quasiment systématiquement dans le référentiel utilisateur. Lorsque l'utilisateur entre une date, elle sera aussi dans son propre référentiel.

L'enregistrement dans la base de données ou dans un fichier texte se fait dans le référentiel système.

Toute date doit être enregistrée dans le référentiel système, c'est le seul référentiel qu'ont en commun tous les utilisateurs et qui fournira donc une heure équivalente à chacun d'entre eux. Il est impératif de respecter cette règle.

Initialiser la classe




Selon vos besoins, vous allez avoir besoin de la date actuelle ou d'initialiser la classe avec un timestamp.

Date actuelle




Code PHP :
$date = new Date();


Le code ci-dessus va initialiser la classe avec la date et l'heure actuelle.

Timestamp




Code PHP :
$date = new Date($timestamp, Timezone::TIMEZONE_SYSTEM);


- Le premier paramètre
$timestamp
spécifie le timestamp de la date.

- Le deuxième paramètre est le timezone, vous pouvez utiliser le timezone (décalage horaire) du serveur, de l'utilisateur ou celui de la configuration du site. Les valeurs sont :
Timezone::TIMEZONE_SITE, Timezone::TIMEZONE_SYSTEM, Timezone::TIMEZONE_USER


Affichage de la date


La date peut être affichée selon différents formats :

  • Date::FORMAT_DAY_MONTH (par défaut) affichage court de la date, de la forme JJ/MM
  • Date::FORMAT_DAY_MONTH_YEAR affichage de la date, de la forme JJ/MM/AAAA
  • Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE affichage de la date complet avec heure et minutes, de la forme JJ/MM/AAAA à HHhMM
  • Date::FORMAT_TIMESTAMP pour afficher le timestamp
  • Date::FORMAT_RFC822 pour afficher la date au format RFC822
  • Date::FORMAT_ISO8601 pour afficher la date au format ISO8601
  • Date::FORMAT_DAY_MONTH_YEAR_LONG affichage long de la date, de la forme jour mois AAAA
  • Date::FORMAT_DAY_MONTH_YEAR_TEXT affichage long de la date, de la forme jour de la semaine jour mois AAAA
  • Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE_TEXT affichage long de la date, de la forme jour de la semaine jour mois AAAA à HHhMM
  • Date::FORMAT_RELATIVE : affichage la différence entre la date et la date actuelle
  • Date::FORMAT_ISO_DAY_MONTH_YEAR : affiche la date au format ISO, de la forme AAAA-MM-JJ (utilisé dans les input calendriers)



Exemple :

Code PHP :
echo $date->format(Date::FORMAT_DAY_MONTH_YEAR);


Traitement sur l'objet Date




Vous pouvez, après avoir instancié la classe date, utiliser plusieurs fonctions pour obtenir divers renseignements :

Obtenir le timestamp




Code PHP :
$date->get_timestamp();


Obtenir l'année de la date




Code PHP :
$date->get_year();


Obtenir le mois de la date




Code PHP :
$date->get_month();


Obtenir le jour de la date




Code PHP :
$date->get_day();


Obtenir l'heure de la date




Code PHP :
$date->get_hours();


Obtenir les minutes de la date




Code PHP :
$date->get_minutes();


Obtenir les secondes de la date




Code PHP :
$date->get_seconds();


Obtenir le numéro de semaine dans l'année




Code PHP :
$date->get_week_number();


Obtenir le numéro de semaine dans l'année




Code PHP :
$date->get_day_of_week();


Obtenir le numéro du jour dans l'année




Code PHP :
$date->get_day_of_year();


Exporter sous format année-mois-jour




Code PHP :
$date->to_date();


Vérifier si l'année de la date est bissextile




Code PHP :
$date->is_date_year_bissextile();


Vérifier si la date est antérieure à une autre date




Code PHP :
$date->is_anterior_to(Date $date);


Vérifier si la date est postérieure à une autre date




Code PHP :
$date->is_posterior_to(Date $date);


Vérifier si la date est égale à une autre date




Code PHP :
$date->equals(Date $date);


Modifier les données d'une date après sa création




Vous pouvez, après création de l'objet, modifier la date, son jour, l'année, l'heure, etc :

Code PHP :
$date->set_year($year); // Change l'année
$date->set_month($month); // Change le mois
$date->set_day($day); // Change le jour
$date->set_hours($hours): // Change l'heure
$date->set_minutes($minutes); // Change les minutes
$date->set_seconds($second); // Change les secondes
$date->add_days($number_days); // Ajoute $number_days jours
$date->add_weeks($number_weeks); // Ajoute $number_weeks jours
 
Cette page a été vue 7360 fois