Die Regeln (fett gedruckt unten) sind, glaube ich, nicht so zahlreich, dass der zu implementierende Code eine „Rauchmaschine“ wäre. Aber ich gebe viele Erläuterungen und Beispiele, damit sich jeder ein Bild machen und Verhaltensweisen erkennen kann, die nicht relevant wären. Ich bin offen für euer Feedback, um es zu verfeinern!
====== Navigation mit den Pfeilen: ======
- Wenn man auf den linken Pfeil klickt, wird der angezeigte Zeitraum um einen Zeitraum in die Vergangenheit verschoben (das neue Enddatum ist das alte Startdatum)
- Wenn man auf den rechten Pfeil klickt, wird der angezeigte Zeitraum um einen Zeitraum in die Zukunft verschoben (das neue Startdatum ist das alte Enddatum)
Hinweis: Zwei aufeinanderfolgende Aktionen, zuerst linker Pfeil, dann rechter Pfeil (oder umgekehrt), sind ‹ symmetrisch ›; dies bringt die x-Achse genau auf denselben Zeitraum zurück
Besonderer Fall: Wenn das Enddatum >= jetzt ist, wird der rechte Navigationspfeil deaktiviert (um nicht in die Zukunft zu navigieren, die noch keine Daten hat)
====== Wechsel des Modus ‹ regelmäßig/gleitend ›: ======
Im regelmäßigen Modus sind die Zeiträume wie folgt definiert:
- 1h: Der Zeitraum ist eine volle Stunde, z. B. von 8 Uhr bis 9 Uhr
- 12h: Der Zeitraum ist ein voller halber Tag, also von 0 Uhr bis 12 Uhr oder von 12 Uhr bis 24 Uhr
- 24h: Der Zeitraum ist ein voller Tag, von 0 Uhr bis 24 Uhr
- 7 Tage: Der Zeitraum ist eine volle Woche, von Montag 0 Uhr bis Sonntag 24 Uhr
- 1 Monat: Der Zeitraum ist ein voller Monat, z. B. vom 1/1 0 Uhr bis 31/1 24 Uhr oder vom 1/2 0 Uhr bis 28/2 24 Uhr.
- 3 Monate: Der Zeitraum ist ein volles Kalenderquartal, z. B. vom 1/4 0 Uhr bis 30/6 24 Uhr
- 1 Jahr: Der Zeitraum ist ein volles Jahr, vom 1/1 0 Uhr bis 31/12 24 Uhr
Wenn man in den Modus ‹ regelmäßig › wechselt: Der neue Zeitraum enthält das vorherige Enddatum (man verschiebt sich also etwas in die Zukunft)
- Beispiel 1 für einen Zeitraum ‹ 1 Tag ›: Die Anzeige von « 2/4 18:25 bis 3/4 18:25 » wird zu « 3/4 0 Uhr bis 3/4 24 Uhr »
- Beispiel 2 für einen Zeitraum ‹ 7 Tage ›: Die Anzeige von « 27/3 18:25 bis 3/4 18:25 » wird zu « 31/3 0 Uhr bis 6/4 24 Uhr » (= von Montag bis Sonntag einschließlich 3/4)
Wenn man in den Modus ‹ gleitend › wechselt: Der neue Zeitraum « passt sich » an den aktuellen Tag und die aktuelle Uhrzeit an (man verschiebt sich also etwas in die Vergangenheit)
Hinweis: Das neue Enddatum wird so spät wie möglich sein, ohne das vorherige Enddatum zu überschreiten
Hinweis: Die Ausrichtung auf den aktuellen Tag und die aktuelle Uhrzeit ermöglicht es, auf ‹ jetzt › zurückzukehren, wenn man mit dem rechten Pfeil navigiert…
Die Ausrichtung des Periodenendes erfolgt wie folgt, je nach Periodentyp (unter der Annahme, dass das aktuelle Datum Donnerstag, der 3. April, 18:25 Uhr ist):
- 1h: Das Periodenende wird auf xh25 ausgerichtet
- 12h: Das Periodenende wird auf 18:25 Uhr ausgerichtet
- 24h: Das Periodenende wird auf 18:25 Uhr ausgerichtet
- 7 Tage: Das Periodenende wird auf Donnerstag 18:25 Uhr ausgerichtet
- 1 Monat: Das Periodenende wird auf 3/x 18:25 Uhr ausgerichtet
- 3 Monate: Das Periodenende wird auf 3/x 18:25 Uhr ausgerichtet, aber mit x verschoben um ein Vielfaches von 3 mit dem aktuellen Monat (also Januar, April, Juli oder September in meinem Beispiel)
- 1 Jahr: Das Periodenende wird auf 3/4 18:25 Uhr ausgerichtet
Beispiele:
- Beispiel 1 für einen Zeitraum ‹ 1 Tag ›: Die Anzeige von « 3/4 0 Uhr bis 3/4 24 Uhr » wird zu « 2/4 18:25 bis 3/4 18:25 »
- Beispiel 2 für einen Zeitraum ‹ 7 Tage ›: Die Anzeige von « 31/3 0 Uhr bis 6/4 24 Uhr » wird zu « 27/3 18:25 bis 3/4 18:25 » (um an einem Donnerstag zu enden)
- Beispiel 3 für einen Zeitraum ‹ 1 Monat ›: Die Anzeige von « 1/4 0 Uhr bis 30/4 24 Uhr » wird zu « 3/3 18:25 bis 3/4 18:25 » (um an einem 3. des Monats zu enden)
====== Änderung des Periodentyps: ======
Wenn man die Periode ändert, um sie zu verlängern:
- im Modus ‹ gleitend › wird das Enddatum nicht geändert
- im Modus ‹ regelmäßig › enthält die neue Periode das vorherige Enddatum
Hinweis: Die neue, längere Periode enthält in der Regel die vorherige Periode vollständig, außer manchmal, wenn man von einer Periode ‹ 7 Tage › ausgeht
- Beispiel 1: Wenn eine Periode ‹ 1 Tag › angezeigt wird, die ein Mittwoch ist, wird die Periode ‹ 7 Tage › von Montag bis Sonntag einschließlich dieses Mittwochs gehen
- Beispiel 2: Wenn eine Periode ‹ 7 Tage › angezeigt wird, die von Montag, dem 17.2., bis Sonntag, dem 23.2., geht, wird der Wechsel zur Periode ‹ 1 Monat › vom 1.2. bis 28.2. gehen (einschließlich also des Sonntags, 23.2.)
- Beispiel 3 (weniger intuitiv): Wenn eine Periode ‹ 7 Tage › angezeigt wird, die von Montag, dem 24.2., bis Sonntag, dem 2.3., geht, wird der Wechsel zur Periode ‹ 1 Monat › vom 1.3. bis 31.3. gehen (einschließlich also des Sonntags, 2.3.)
Wenn man die Periode ändert, um sie zu verkürzen:
- im Modus ‹ gleitend › wird das Enddatum nicht geändert
- im Modus ‹ regelmäßig › enthält die neue Periode das vorherige Enddatum.
Besonderer Fall: Wenn diese Änderung die neue Periode vollständig in die Zukunft versetzt, dann wird die neue Periode tatsächlich diejenige sein, die ‹ jetzt › enthält.
Hinweis: Die neue, kürzere Periode ist in der Regel vollständig in der vorherigen Periode enthalten, außer manchmal, wenn man zu einer Periode ‹ 7 Tage › wechselt
- Beispiel 1: Wenn eine Periode ‹ 7 Tage › angezeigt wird, die von Montag bis Sonntag geht und vollständig in der Vergangenheit liegt, dann wird der Wechsel zur Periode ‹ 1 Tag › den Sonntag anzeigen.
- Beispiel 2: Wenn eine Periode ‹ 7 Tage › angezeigt wird, die von Montag bis Sonntag geht, aber heute der Mittwoch dieser Woche ist, dann wird der Wechsel zur Periode ‹ 1 Tag › den Mittwoch anzeigen
- Beispiel 3: Wenn eine Periode ‹ 1 Monat › angezeigt wird, die von Samstag, dem 1.2., bis Freitag, dem 28.2., geht, dann wird der Wechsel zur Periode ‹ 7 Tage › von Montag, dem 24.2., bis Sonntag, dem 2.3., gehen (einschließlich also des Freitags, 28.2.)
Ein kleiner Nachteil bei der Navigation im ‹ Zickzack › in mindestens zwei Fällen:
- Im Modus ‹ regelmäßig ›, wenn man von einem ziemlich alten Datum ausgeht und die Änderungen der Periode ‹ 7 Tage ›-‹ 1 Monat › hintereinander ausführt, wird man sich allmählich in die Zukunft verschieben, da die Monate nicht immer an einem Sonntag enden
Zum Beispiel: 6-12/1 => 1-31/1 => 27/1-2/2 => 1-28/2 => 24/2-2/3 => 1-31/3 … Aber der Fall ist selten, und man wird schließlich auf einen Sonntag am Monatsende oder auf ‹ jetzt › stoßen, also scheint es nicht so schlimm zu sein…
- Ebenso, wenn man ‹ 7 Tage ›-‹ 1 Jahr › abwechselt. Aber das ist noch seltener…