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 |
echo date("d/m/Y"); // Affiche la date du jour
echo "Il est " . date("H:i:s") ; // Affiche l'heure
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
echo time(); //Affiche le nombre de secondes écoulées depuis le 1er janvier 1970
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
$timestamp1 = 1515929671; // Timestamp affiché quand j'ai écris ce cours
echo date('d/m/Y',$timestamp1);
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
$vieux_timestamp = mktime(22, 45, 26, 7, 12, 1998);
echo 'Le timestamp du 12/07/1998 à 22h 45min 26s était : ' . $vieux_timestamp;
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 . |
Attention : 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.
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.
$today = getdate();
print_r($today);
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.
echo strtotime("now"), "\n";
echo strtotime("15 January 2018"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
Ajouter un délai à une date
$date='2018-01-15';
$date_terminee=date('Y-m-d', strtotime('+1 month', strtotime($date)));
echo $date_terminee;
Exemple
2018-02-15
date_diff()
Permet de faire un calcul entre 2 dates.
$datetime1 = date_create($date);
$datetime2 = date_create($date_terminee);
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days');
Exemple
+31 days
Pratique : une fonction pour traduire la date
$date_titre=date('Y-m-d');
function DateFr($date_titre){
$datea1=substr($date_titre,0,4);
$datem1=substr($date_titre,5,2);
$datej1=substr($date_titre,8,10);
return $datej1."/".$datem1."/".$datea1;
}
echo "La date du jour est : ".DateFr($date_titre);