Hello,
Klar soweit? 😉
ehrlich? Gar nichts ist klar. Ich habe nicht mal Bahnhof verstanden :/ Außerdem wüsste ich nicht wie ich deine Formel auf mein Beispiel anwenden könnte.
Dann lieber nochmal von vorne.
Zuerst die Aufgabe und ihre denkbaren Lösungswege, also theoretisch, dann unter berücksichtigung der verfügbaren Funktionen uned Methoden der gewünschten Programmiersprachen. Da gibt es leider immer wieder erhebliche Diskrepanzen.
-
Du hast mehrere human readable Zeitangaben, z. B. "17:33" und "09:12". Beide sind ohne Datumsbezug, daher nehmen wir als erstes an, dass Sie am (Offest-)Tag 0 stattgefunden haben.
-
Nun möchte bitte dein Programm mit den Angaben rechnen können. Dazu wählen wir uns erst einmal eine gewünschte Genauigkeit (hier: eine Minute) und eine dazu passende Darstellung der Computers, mit der er rechnen kann (hier: eine Sekunde). Der Computer stellt für sich also jede Datums-mit-Zeit-Angabe in Sekunden seit einem Startdatum dar. Da uns das Datum selbst nicht interessiert hat (im ersten Denkschritt), sagen ir einfach, unsere Zeiten zählen ab Datumswert 0 (siehe oben). Das setzt selbstverständlich voraus, dass unsere Zeiten den Gültigkeitsbereich eeines Tages nicht verlassen!
-
Nun, nachdem wir unsere Zeitäquivalentwerte einfach voneinander abgezogen haben, haben wir schon mal die Differnz als Äquivalenzwert. Die könnten wir nun sofort zurückrechnen in "human readable Time", aber da haben wir ja noch das Problem mit der Quantisierung auf Viertelstunden!
-
Wir überlegen uns daher, vieviel Einheiten (hier Sekunden) unser Quantum (Viertelstunde) hat. Eine Viertelstunde hat 60 * 60 * 15 Sekunden. Wenn wir nun die Gesamtdifferenz durch dieses Quantum teilen und nur das gazzahlige Ergebnis berücksichtigen, (das wäre "div", was es in PHP aber nicht gibt), dann hätten wir die Anzahl der vollen Viertelstunden. Der Rest (das Modulo, in PHP duch den Operator "mod" ermittelbar) wären die übeschüssigen Sekunden, die keine volle Viertelstunde mehr ergeben.
-
Da es "div" (Ganzzahldivision) in PHP nicht gibt, wie könnten wir das emulieren?
Wir benuten einfach "/", was aber wieder floats ergibt. Das Ergebnis wird also zu groß sein. Die nächste kleinere Ganzzahl wird mit floor() ermittelt. Einfloor(a / b)
müsste also einema div b
entsprechen. -
Wir haben nun also die Anzahl der Viertelstunden. Sollte ein Rest (mod) übrig gebleiben sein, merken wir uns den. Nun können wir mit derselben Methode noch die vollen Stunden ermitteln (floor(vH / 4) = H)
und (vH mod 4 = rvh) viertelStunden mod 4 = restliche viertelStunden.
Wenn vorhin noch ein Überhang in Sekunden vorhanden war, musst Du die Anzahl der verbliebenen Viertelstunden bei Aufrundung noch um 1 erhöhen.
Nun sollte es Dir möglich sein, das Ganze in ein Formelwerk nebst Bedingeungen (nicht eine einzige Formel) umzusetzen. Mathematiker neigen oft dazu, alles in einer einzigen Formel abbilden zu wollen, Programmierer haben den Vorteil, dass sie einen Algorithmus daraus machen können.
Liebe Grüße
Tom S.
Es gibt nichts Gutes, außer man tut es
Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.