[149 vues] 2022-02-22 Emmanuel Orchanian
NOTE : cet article a été affiché dans sa langue originale.
Anatomie d'une date
Je considère une date comme composée de trois éléments : le jour, le mois, et l'année.
Bien sûr,
Trois manières de disposer une date
- Ordre croissant (comme en France) : jour mois année
- Ordre inverse de croissant,
chocolatine: décroissant (comme dans les bases de données) : année mois jour - Ordre américain : mois jour année
Lequel est le meilleur ? (pour le codeur)
L'ordre décroissant en mettant les zéros devant, parce ce qu'il est à la fois triable dans l'ordre numérique et alphabétique, par exemple :
01/01/2050
31/12/1970
2050-01-01
31/12/1970
Attention ! On ne dit pas que c'est triable de manière croissante ou décroissante, on dit que :
- Seule la disposition année-mois-jour est triable en général
- La disposition jour-mois-année ou américaine ne sont pas triables du tout !
Je vous conseille de nommer vos fichiers et dossiers selon les dates dans l'ordre décroissant
En effet, ainsi il deviennent triable, voir l'article à ce sujet.
Parlons des séparateurs
Le séparateur est le signe qui va être entre chaque élément.
31slash, comme en français/ 12/200031traits d'union, comme en écriture de bases de données- 12-200031espace, naturellement 12 200031underscore, comme on peux le faire pour les nombres en PHP_ 12_200031122000rien, pour accoler et ainsi avoir un nombre qui définit la date
Comparer des dates
Le SQL peux directement comparer les dates
Selon beaucoup de langages, 31-12-2000 ne pourra pas être un nombre mais un texte, ainsi on ne pourra pas faire des comparaison de dates.
Mais en SQL, on a le droit de comparer des dates, par exemple WHERE date > '2000-01-01'
Enlever les séparateurs et transformer en nombre
"31-12-2001""31122001"on enlève les séparateurs en accolant tout31122001on transforme en nombre
On peux alors comparer date > 20000101
Par exemple je vais comparer si le 1er janvier 2000 tombe après le 11 novembre 1999 ?
Je les transforme en nombre et je fais une simple comparaison mathématique
1er janvier 2000
= "2000-01-01"
= 20000101
= 20 000 101 (vingt millions cent un)
11 novembre 1999 = "1999-11-11"
= 19991111
= 19 991 111 (dix-neuf millions 991 mille 111)
20000101 > 19991111
Passage en objet
Dans la plupart des langages, on utilisera le passage en objet ou l'utilisation de fonctions pour manipuler les dates.
Ça peux permettre de vérifier par exemple si une date apertient au calendrier grégorien, par exemple le 31-02-1990 n'existe pas, car février n'a pas 31 jours !
Exemple de code en PHP en passant par des fonctions
// FUSEAU HORAIRE
date_default_timezone_set('Europe/Paris');
// date php
$obj_date = date_create('1999-12-31');
date_modify($obj_date, '+1 day');
echo date_format($obj_date, 'd/m/Y'); // écrira la date au format français "31/12/1990"
Et les date-heures ?
Trois manières générales de noter le temps
- Date 2000-31-12
- Heure 13:51:48 (heure, minutes, secondes)
- Date-heure (datetime), c'est les deux : 2000-31-12 13:51:48
Écriture des heures
On a de la chance, c'est souvent le signe deux-points :
Et concernant l'ordre, c'est toujours décroissant, heure-minutes-secondes, personnellement je n'ai jamais vu écrire d'abord les minutes puis les heures...
Dans Windows, le signe :est interdit pour nommer les fichiers, certains utilisent alors le signe point-virgule ; qui lui ressemble. 16
Note : le séparateur entre la date et l'heure est souvent l'espace 2000-01-01
Comparaison des dates-heure
C'est la même logique : le SQL le fait pas défaut WHERE datetime > '2000-01-01 23:59:20'
1er janvier 2000 à 16h10 et 59 secondes
= "2000-01-01 16:10:59"
= 20000101161059
= 20 000 101 161 059 (vingt mille milliard de mille sabord)
20000101161059 > 19991111000000
Méthode personnelle
Depuis un certain temps, pour mes petits projets personnels, je me rends compte que le système le plus paresseux et rapide, mais pas le plus professionnel, c'est de mettre sous forme de nombres. Par exemple 13 novembre 1990 deviens 19901113, cela permet ainsi les comparaisons entre nombres, de la même manière que le SQL.
J'apelle ça les "dateint", voici une fonction pour y placer des
function dateint2dateslash(int $_d){ // TODO: mettre en ligne
// $sep = '/';
$sep = '-';
$a = substr($_d,0,4);
$m = substr($_d,4,2);
$j = substr($_d,6,2);
return $a.$sep.$m.$sep.$j; // pour le coté informatique
// return $j.$sep.$m.$sep.$a;
}
Merci d'avoir lu !
Si en général vous avez une question, une curiosité, n'hésitez pas me contacter.