Les règles (en gras ci-dessous) sont assez peu nombreuses, je crois, pour que le code à mettre en place ne soit pas une usine à gaz. Mais je donne pas mal de précisions et d’exemples, pour que chacun puisse se faire une idée et repère des comportements qui ne seraient pas pertinents. Je suis preneur de vos retours, pour affiner !
====== Navigation avec les flèches : ======
- Quand on clique sur la flèche gauche, la période affichée est décalée d’une période dans le passé (la nouvelle date de fin est l’ancienne date de début)
- Quand on clique sur la flèche droite, la période affichée est décalée d’une période dans le futur (la nouvelle date de début est l’ancienne date de fin)
Note : Deux actions successives flèche gauche puis flèche droite (ou l’inverse) sont ‹ symétriques › ; cela ramène l’axe des abscisses exactement sur la même période
Cas particulier : Si la date de fin est >= maintenant, la flèche de navigation droite devient inactive (pour ne pas aller explorer dans le futur qui n’a pas encore de données)
====== Changement de mode ‘régulier/glissant’ : ======
En mode régulier, les périodes sont définis de la façon suivante :
- 1h : la période est une heure entière, par exemple de 8h à 9h
- 12h : la période est une demi-journée entière, donc de 0h à 12h ou de 12h à 24h
- 24h : la période est une journée entière, de 0h à 24h
- 7 jours : la période est une semaine entière, de lundi 0h à dimanche 24h
- 1 mois : la période est un mois entier, par exemple du 1/1 0h au 31/1 24h, ou du 1/2 0h au 28/2 24h.
- 3 mois : la période est un trimestre calendaire entier, par exemple du 1/4 0h au 30/6 24h
- 1 année : la période est une année entière, du 1/1 0h au 31/12 24h
Quand on passe en mode ‹ régulier › : la nouvelle période inclut la date de fin précédente (on se décale donc un peu dans le futur)
- Ex1 pour une période ‹ 1 jour › : l’affichage de « 2/4 18h25 à 3/4 18h25 » devient « 3/4 0h à 3/4 24h »
- Ex2 pour une période 7 jours’ : l’affichage de « 27/3 18h25 à 3/4 18h25 » devient « 31/3 0h à 6/4 24h » (= de lundi à dimanche incluant le 3/4)
Quand on passe en mode ‹ glissant › : la nouvelle période « s’aligne » sur le jour et l’heure courante (on se décale donc un peu dans le passé)
Précision : la nouvelle date de fin sera la plus récente possible, sans dépasser la date de fin précédente
note : l’alignement sur le jour et l’heure courante permet de retomber sur ‹ maintenant › quand on naviguera avec la flèche droite…
L’alignement de la fin de période est fait de la façon suivante, selon le type de période (en prenant pour exemple que la date courante est jeudi 3 avril 18h25) :
- 1h : la fin de période sera alignée sur xh25
- 12h : la fin de période sera alignée sur 18h25
- 24h : la fin de période sera alignée sur 18h25
- 7 jours : la fin de période sera alignée sur jeudi 18h25
- 1 mois : la fin de période sera alignée sur 3/x 18h25
- 3 mois : la fin de période sera alignée sur 3/x 18h25, mais avec x décalé d’un multiple de 3 avec le mois courant (donc janvier, avril, juillet ou sept. dans mon exemple)
- 1 année : la fin de période sera alignée sur 3/4 18h25
Exemples:
- Ex1 pour une période ‹ 1 jour › : l’affichage de « 3/4 0h à 3/4 24h » devient « 2/4 18h25 à 3/4 18h25 »
- Ex2 pour une période 7 jours’ : l’affichage de « 31/3 0h à 6/4 24h » devient « 27/3 18h25 à 3/4 18h25 » (pour se finir un jeudi)
- Ex3 pour une période 1 mois’ : l’affichage de « 1/4 0h à 30/4 24h » devient « 3/3 18h25 à 3/4 18h25 » (pour se finir un 3 du mois)
====== Changement de type de période : ======
Quand on change la période pour l’agrandir :
- en mode ‹ glissant ›, la date de fin n’est pas modifiée
- en mode ‹ régulier ›, la nouvelle période inclut la date de fin précédente
Note : en général la nouvelle période plus large inclut complètement la période précédente, sauf parfois quand on part d’une période ‹ 7 jours ›
- Ex1 : si on affiche une période ‹ 1 jour › qui est un mercredi, la période ‹ 7 jours › ira du lundi au dimanche incluant ce mercredi
- Ex2 : si on affiche une période ‹ 7 jours › qui va de lundi 17/2 à dimanche 23/2, le passage en période ‹ 1 mois › ira du 1/2 au 28/2 (incluant donc le dimanche 23/2)
- Ex3 (moins intuitif) : si on affiche une période ‹ 7 jours › qui va de lundi 24/2 à dimanche 2/3, le passage en période ‹ 1 mois › ira du 1/3 au 31/3 (incluant donc le dimanche 2/3)
Quand on change la période pour la réduire :
- en mode ‹ glissant ›, la date de fin n’est pas modifiée
- en mode ‹ régulier ›, la nouvelle période inclut la date de fin précédente.
Cas particulier : si ce changement situe la nouvelle période entièrement dans le futur, alors la nouvelle période sera en fait celle qui inclut ‹ maintenant ›.
Note : en général la nouvelle période plus réduite est incluse complètement dans la période précédente, sauf parfois quand on va vers une période ‹ 7 jours ›
- Ex1 : si on affiche une période ‹ 7 jours › qui va de lundi à dimanche, entièrement passée, alors le passage en période ‹ 1 jour › affichera le dimanche.
- Ex2 : si on affiche une période ‹ 7 jours › qui va de lundi à dimanche, mais qu’aujourd’hui est le mercredi de cette semaine-là, alors le passage en période ‹ 1 jour › affichera le mercredi
- Ex3 : si on affiche une période ‹ 1 mois › qui va de samedi 1/2 à vendredi 28/2, le passage en période ‹ 7 jours › ira de lundi 24/2 à dimanche 2/3 (incluant donc le vendredi 28/2)
Un petit défaut avec la navigation en ‹ zigzag › dans 2 cas au moins :
- En mode ‹ régulier ›, si on part d’une date assez ancienne et qu’on enchaine les changements de période ‹ 7 jours ›-‹ 1 mois ›, on va se décaler progressivement dans le futur car les mois ne finissent pas toujours un dimanche
Par exemple : 6-12/1 => 1-31/1 => 27/1-2/2 => 1-28/2 => 24/2-2/3 => 1-31/3 … Mais le cas est rare, et on va finir par ‹ buter › sur un dimanche de fin de mois ou sur ‹ maintenant ›, donc ça me semble pas trop grave…
- Idem si on alterne ‹ 7 jours ›-‹ 1 an ›. Mais c’est encore plus rare…