Fonctions de date

Dans cette première partie, nous allons utiliser des fonctions en PHP permettant d'agir sur les dates .

  • date(), Permet d'afficher une date, l'heure, le numéro de semaine ...

  • mktime(), Permet de récupérer le timestamp à partir d'une date.

  • getdate(), Retourne un tableau associatif contenant les informations de date et d'heure du timestamp (lorsqu'il est fourni, sinon, le timestamp de la date/heure courante)

  • print_r(), Affiche des informations à propos d'une variable, de maniére à ce qu'elle soit lisible. Pour une chaîne, un entier ou un double, la valeur elle même sera affichée

  • strtotime(), Transforme un texte anglais en timestamp

  • datediff(), Permet de faire un calcul entre 2 dates

date()

La fonction date permet d'afficher la date et l'heure sous différents formats.

Caractère

Signification

Exemples de valeurs possibles :

Jour

j

jour du mois sur deux chiffres sans les zéros initiaux

1 à 31

d

Jour du mois sur deux chiffres avec un zéro initial en fonction du jour

01 à 31

l (L minuscule)

Jour de la semaine en anglais

Sunday à Saturday

w

Jour de la semaine au format numérique

0 (dimanche) à 6 (samedi)

z

Jour de l'année

0 à 366

Semaine

W

Numéro de semaine dans l'année (les semaines commencent le lundi)

Exemple : 42 (la 42éme semaine de l'année)

Mois

F

Mois, textuel, version longue; en anglais, comme January ou December

January à December

m

Mois au format numérique, avec zéros initiaux

01 à 12

n

Mois sans les zéros initiaux

1 à 12

t

Nombre de jours dans le mois

28 à 31

Année

L

Est ce que l'année est bissextile ?

1 si bissextile, 0 sinon.

Y

Année sur 4 chiffres

Exemples : 1998 et 2018

y

Année sur 2 chiffres

Exemples : 98 et 18

Heure

a

Ante méridien et Post méridien (minuscules)

am ou pm

A

Ante méridien et Post méridien (majuscules)

AM ou PM

G

Heure (format 24h) sans les zéros initiaux

0 à 23

h

Heure (format 12h) avec les zéros initiaux

01 à 12

H

Heure (format 24h) avec les zéros initiaux

00 à 23

s

Secondes avec zéros initiaux

00 à 59

i

Minutes avec zéros initiaux

00 à 59

I (i majuscule)

l'heure d'été est activée ou pas ?

1 si oui, 0 sinon

1
<?php
2
    echo date("d/m/Y"); // Affiche la date du jour
3
    echo "Il est " . date("H:i:s") ; // Affiche l'heure
4
?>

Le timestamp PHP

Un timestamp, c'est un nombre.

C'est le nombre de secondes écoulées depuis le 1er Janvier 1970 à Minuit.

Pourquoi depuis le 1er Janvier 1970 à Minuit ? C'est symbolique, il fallait bien prendre un point de départ.

En fait, ça représente le début de l'époque où le système d'exploitation Unix a été créé.

Le 1er Janvier 1970 à Minuit, le timestamp avait pour valeur 0. Aujourd'hui, beaucoup beaucoup de secondes se sont écoulées.

Pour afficher le timestamp de la seconde actuelle, on utilise la fonction time()

Afficher le timestamp avec time

1
<?php
2
    echo time(); //Affiche le nombre de secondes écoulées depuis le 1er janvier 1970
3
?>

Le timestamp avec la fonction date

Il est possible de fournir un second paramètre à date (après les lettres) : le timestamp sur lequel vous voulez obtenir des informations.

Par défaut, date utilise le timestamp actuel : elle renvoie donc l'heure actuelle, le jour actuel etc...

Mais si vous lui donnez un timestamp, elle fera des calculs sur ce moment-là.

Allez, pour faire un test grandeur nature, je vous donne le timestamp qu'il était au moment où j'ai écrit ces lignes

1
<?php
2
    $timestamp1 = 1515929671; // Timestamp affiché quand j'ai écris ce cours
3
    echo date('d/m/Y',$timestamp1);
4
?>

Exemple

Lorsque vous écrirez une news, il vous suffira d'enregistrer juste le timestamp, et vous serez capables grâce à ce nombre de ressortir toutes les infos possibles et imaginables dessus : le jour où la news a été postée, l'heure qu'il était etc...

Récupérer le timestamp à partir d'une date avec mktime

Enfin, une dernière chose qu'il peut être très utile de savoir faire : vous aimeriez connaître le timestamp qu'il était le 12 Juillet 1998 à 22 h 45min 26s.

Pour récupérer le timestamp correspondant, on va utiliser la fonction mktime. On va lui donner en paramètre une date, et elle va nous ressortir le timestamp correspondant.

Cette fonction peut prendre pas mal de paramètres, en voici la liste dans l'ordre :

mktime(heure, minutes, secondes, mois, jour, an, heure d'hiver)

Dans la pratique, vous pouvez oublier le dernier paramètre (heure d'hiver) qui ne vous sera pas utile en général.

Sachez qu'il faut mettre 1 si l'heure d'hiver est activée, 0 si elle ne l'est pas.

Mais passons. Si on enlève l'heure d'hiver pour éviter de s'embrouiller, il reste 6 paramètres possibles qu'on retiendra :

Exemple

Je veux toujours le timestamp du 12 Juillet 1998 à 22h 45min 26s

1
<?php
2
    $vieux_timestamp = mktime(22, 45, 26, 7, 12, 1998);
3
    echo 'Le timestamp du 12/07/1998 à 22h 45min 26s était : ' . $vieux_timestamp;
4
?>

getdate()

getdate retourne un tableau associatif contenant les informations de date et d'heure du timestamp (lorsqu'il est fourni, sinon, le timestamp de la date/heure courante), avec les champs suivants :

array getdate ( int timestamp )

Clé

Description

Exemple de valeur retournée

"seconds"

Représentation numérique des secondes

0 à 59

"minutes"

Représentation numérique des minutes

0 à 59

"hours"

Représentation numérique des heures

0 à 23

"mday"

Représentation numérique du jour du mois courant

1 à 31

"wday"

Représentation numérique du jour de la semaine courante

0 (pour dimanche) à 6 (pour samedi)

"mon"

Représentation numérique du mois

1 à 12

"year"

Année sur 4 chiffres

Exemples : 1998 ou 2018

"yday"

Représentation numérique du jour de l'année

0 à 365

"weekday"

Version texte du jour de la semaine

Sunday à Saturday

"month"

Version texte du mois

January à December

0

Nombre de secondes depuis l'époque Unix, similaire à la valeur retournée par la fonction time et utilisée par date

Dépend du systéme, typiquement de -2147483648 à 2147483647 .

Attentionprint_r()

Affiche des informations à propos d'une variable, de manière à ce qu'elle soit lisible. Pour une chaîne, un entier ou un double, la valeur elle même sera affichée.

Pour les tableaux, les valeurs seront présentées dans un format qui montre les clés et les valeurs.

Gardez en tête que print_r place le pointeur de tableau à la fin du tableau. Utilisez reset pour le ramener au début.

1
<?php
2
    $today = getdate();
3
    print_r($today);
4
?>

Exemple

Array ( [seconds] => 1 [minutes] => 49 [hours] => 11 [mday] => 14 [wday] => 0 [mon] => 1 [year] => 2018 [yday] => 13 [weekday] => Sunday [month] => January [0] => 1515930541 )

strtotime()

Transforme un texte anglais en timestamp

Retourne un timestamp en cas de succès, FALSE sinon.

1
<?php
2
    echo strtotime("now"), "\n";
3
    echo strtotime("15 January 2018"), "\n";
4
    echo strtotime("+1 day"), "\n";
5
    echo strtotime("+1 week"), "\n";
6
    echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
7
    echo strtotime("next Thursday"), "\n";
8
    echo strtotime("last Monday"), "\n";
9
?>

Ajouter un délai à une date

1
<?php
2
    $date='2018-01-15';
3
    $date_terminee=date('Y-m-d', strtotime('+1 month', strtotime($date)));
4
    echo $date_terminee;
5
?> 

Exemple

2018-02-15

date_diff()

Permet de faire un calcul entre 2 dates.

1
<?php
2
    $datetime1 = date_create($date);
3
    $datetime2 = date_create($date_terminee);
4
    $interval = date_diff($datetime1, $datetime2);
5
6
    echo $interval->format('%R%a days');
7
?>

Exemple

+31 days

Pratique : une fonction pour traduire la date

1
<?php
2
	$date_titre=date('Y-m-d');
3
4
	function DateFr($date_titre){
5
		$datea1=substr($date_titre,0,4);
6
		$datem1=substr($date_titre,5,2);
7
		$datej1=substr($date_titre,8,10);
8
9
		return $datej1."/".$datem1."/".$datea1;
10
	}
11
12
	echo "La date du jour est : ".DateFr($date_titre);
13
?>