Programmation PHP/Dates



date()Modifier

La fonction date() créer une chaine de caractère contenant la date du jour au format défini par son paramètre, selon la syntaxe suivante[1] :

  • Y (year) : année.
  • m (month) : mois.
  • d (day) : jour.
  • w (week) : jour de la semaine sous forme d'un numéro.
0 dimanche
1 lundi
2 mardi
3 mercredi
4 jeudi
5 vendredi
6 samedi

Exemple :

echo date('Y-m-d'); // affiche 2016-07-10

A cela on peut rajouter les options d'horodatage les plus courantes :

  • a (ante meridiem ou post meridiem) : renvoie "am" le matin et "pm" l'après-midi.
  • h (hour) : heure de 0 à 12. A utiliser avec "a".
  • H (Hour) : heure de 0 à 24.
  • i (minute) : minute.
  • s (second) : seconde.

Exemple :

echo date('Y-m-d H:i:s'); // affiche 2016-07-10 20:06:34

strtotime()Modifier

Cette fonction transforme un texte (en anglais) en date[2].

Exemples courants :

$demain = date('Y-m-d', strtotime('+1 day'));
$hier = date('Y-m-d', strtotime('-1 day'));

Pour afficher la plage des dates de la semaine précédente[3] :

$previous_week = strtotime('-1 week +1 day');

$start_week = strtotime('last monday midnight', $previous_week);
$end_week = strtotime('next sunday', $start_week);

$start_week = date('Y-m-d', $start_week);
$end_week = date('Y-m-d', $end_week);

echo 'La semaine dernière était du '.$start_week.' au '.$end_week;
// Le vendredi 2016-07-29 cela affiche : La semaine dernière était du 2016-07-18 au 2016-07-24

checkdate()Modifier

Il est impératif dans un formulaire de vérifier si une date est au bon format. Pour ce faire il existe checkdate()[4] qui demande de séparer le mois, le jour puis l'année. Exemple :

var_dump(checkdate(0, 0, 2000)); // false
var_dump(checkdate(1, 1, 2000)); // true

DateTimeModifier

Cette classe peut être instanciée en style POO ou en style procédural[5]. Exemple :

$date = new DateTime('2018-01-01');
echo $date->format('Y-m-d H:i:s');
// ou
$date = date_create('2018-01-01');
echo date_format($date, 'Y-m-d H:i:s');

Résultat : 2018-01-01 00:00:00.

Elle possède également des méthodes pour modifier les dates :

  • Via une string : $date->modify('-1 day');
  • Via un objet de type DateInterval.

Pour obtenir la date du jour à minuit : (new DateTime())->setTime(0, 0);.

addModifier

La méthode DateTime::add() (et son alias date_add()), permet d'ajouter deux dates[6].

diffModifier

La méthode DateTime::diff() (et son alias date_diff()), permet de soustraire deux dates[7].

Exemple :

$date1 = new DateTime('2017-01-01');
$date2 = new DateTime('2017-11-01');
$dateInterval = $date2->diff($date1);
echo $dateInterval->format('%a jours');

Résultat : 304 jours.

DateTimeImmutableModifier

Idem que DateTime mais immutable[8].

DateIntervalModifier

Cette classe gère les intervalles entre deux dates et est instanciée avec les paramètres suivants, dont les majuscules représentent les valeurs sur deux chiffres (ex : "01" au lieu de "1")[9] :

  • p : period (période).
  • y : year (année).
  • m : month (mois).
  • d : day (jour).
  • h : hour (heure).
  • i : minute.
  • s : second (seconde).
  • a : nombre de jours au total.
  • N : numéro du jour de la semaine (1 = lundi, 7 = dimanche).

Exemple :

$dateInterval = new DateInterval('P1Y2M3D');
echo $dateInterval->format('%y an %m mois %d jours');

Résultat : 1 an 2 mois 3 jours.

Les objets de cette classe peuvent être placés en paramètre des méthodes de DateTime add() et sub(). Ils peuvent aussi être obtenus en résultat de diff() vu ci-dessus.

TimestampsModifier

time()Modifier

Cette fonction affiche la date courante au format horodatage Unix, c'est-à-dire en nombre de seconde depuis le premier janvier 1970.

Ce format permet d'additionner ou soustraire deux dates très facilement, est peut être reconverti en date en étant placé en second paramètre de la fonction date().

mktime()Modifier

Cette fonction (make time) crée une chaine de caractères contenant un horodatage Unix, c'est-à-dire un nombre de seconde représentant une date comprise en 1970 et 2038.

Exemple de calcul avec strtotime(), qui accepte les timestamps en second paramètre :

$christmasTimeStamp = mktime(0, 0, 0, 12, 25, 2017); // 1514178000
$FirstDayOfNextMonthTimeStamp = strtotime('first day of next month', $christmasTimeStamp); // 1514782800
echo 'Le premier du mois après Noël 2017 est : '.date('Y-m-d', $FirstDayOfNextMonthTimeStamp); // 2018-01-01

RéférencesModifier