< Programmation PHP

date()

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.
0dimanche
1lundi
2mardi
3mercredi
4jeudi
5vendredi
6samedi

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()

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()

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

DateTime

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);.

add

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

diff

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.

DateTimeImmutable

Idem que DateTime mais immutable[8].

DateInterval

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.

Timestamps

time()

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()

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érences

Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.