Bonjour,
Vos expériences seront les bienvenues.
L’arithmétique des DATES est loin d’être un problème trivial.
Je connais quelques ingénieurs qui s’y sont cassés les dents dessus et assez longtemps.
Moi-même, je peux en attraper des boutons.
Déjà, je vais commencer par la base :
Le typage des dates :
J’ai pris la liberté de « doubler » chacun des formats de dates (selon IBM) par le même nom mais suivi d’un « C »
comme « condensé » : exemple ISO et ISOC.
Et dans la suite de mes propos quand ce citerais ISO, c’est de ISOC dont je parlerai.
A vous de supprimer les séparateurs.
Date ISO : AAAA-MM-JJ ISOC : AAAAMMJJ
Date USA : MM/JJ/AAAA USAC : MMJJAAAA
Date EUR : JJ.MM.AAAA EURC : JJMMAAAA
Date JIS : AAAA-MM-JJ JISC : AAAAMMJJ
Pour simplifier encore, je vais partir du principe que toutes les opérations seront faites sur des dates ISO(c).
Donc à vous de convertir votre format de date avec les méthodes USA->ISO ou EUR->ISO
Vous voyez que cela se complique.
Glossaire :
AAAA année sur 4 chiffres
MM mois sur 2 chiffres
JJ jour sur 2 chiffres
hh heure sur 2 chiffres
mn minutes sur 2 chiffres
ss secondes sur 2 chiffres
ml millisecondes sur 3 chiffres
Arithmétique des Dates : Exemples
Comparer 2 dates (ISO)
comparer 20000131 avec 20010131 : résultat : plus petit, égal, plus grand
ajouter/enlever(n) jours à une date (ISO)
enlever 1 (jour) à 20120301 : résultat : 20120229
différence entre 2 dates (en années/mois/jours)
différence entre 20120229 et 20120301 : résultat : 0000/00/01
différence entre 20130229 et 20130301 : résultat : 0000/00/00 !!
de plus on pourrait vouloir rendre cette différence d’une façon différente (en jours par exemple)
différence entre 20120301 et 20120228 : résultat : 0000/00/01
remarquez qu’ici on ne donne pas le sens (si on pense à une soustraction)
dernier jour du mois (pour cette date)
pour 201202xx : résultat 29 (2 chiffres)
quantième (pour cette date)
(le quantième est le nombre de jours dans l’année pour arriver à cette date)
pour 20120103 : résultat : 003 (3 chiffres)
date pour ce quantième
il faut donner aussi l’année et le quantième sur 3 chiffres
pour 2012003 (année/quantième) : résultat : 20120103
nombre de jours dans l'année
pour 2012MMjj (ou 2012) : résultat : 366
nombre de jours dans le mois
pour 201202xx : résultat : 29 (2 chiffres)
plus de précision ?
ajouter(AAAAMMJJhhmnssml) à (AAAAMMJJhhmnssml) ISO
(à vous de jouer)
on complique un peu avec les fuseaux horaires ?
date universelle
heure universelle
je vous renvoie à notre ami Google !
maintenant les prises de têtes :
différence entre 2 périodes (ISO)
une période commence à une date début (AAAAMMJJ) et se termine à une date de fin (ISO).
La période comprend la date de début ET la date de fin. Ex : du 1er au 20 janvier.
Il faut se mettre d’accord sur ce que l’on compare : la période P1 avec la période P2,
ou bien la période P2 avec la période P1. Car le résultat ne sera pas nécessairement le même !
explications :
Comparer
P1 : du 6 mai 2013 au 24 mai 2013
P2 : du 15 mai 2013 au 31 mai 2013
Outer-left : du 6 au 14 mai, cette partie de P1 est en dehors de P2
Inner : du 15 au 24 mai (ces périodes sont communes)
Outer-rigth : du 25 au 31 mai (cette partie n’est pas dans P1)
Comparer
P1 : du 15 mai 2013 au 31 mai 2013
P2 : du 6 mai 2013 au 24 mai 2013
Outer-left : du 6 au 14 mai, cette partie est en dehors de P1
Inner : du 15 au 24 mai (ces périodes sont communes)
Outer-rigth : du 25 au 31 mai (cette partie de P1 n’est pas dans P2)
Le résultat semble être le même, mais fonctionnellement parlant ? qu’en est-il ?
Et encore je n'ai choisi que 2 périodes à comparer !
Partager