Altersberechnung - Extended!

Ok, im Prinzip ist es eigentlich ganz einfach ;)

Und zwar gehe ich genau so vor wie beim schritlichen Subtrahieren. Wenn man da bspw. an einer Stelle eine "9" stehen hat und darüber eine "4", dann sagt man ja: "9 auf 14 [4+10] sind 5, also 5 an, 1 gemerkt". Das ganze muss man jetzt auf Zeiten übertragen, und mit den einzelnen Zeitkomponenten rechnen wie mit einzelnen Ziffern.

Beispiel:
Code:
  22:10 (hh:mm)
- 20:45
   1
-------
  01:25

Sprich:
 * 45 auf 70 [10+60!] sind 25 => 25 (Minuten) an, 1 (Stunde) gemerkt
 * 21 [20+1] auf 22 sind 1, 1 (Stunde) an

So verfährt man dann auch mit den anderen Zeitkomponenten. Beim Abziehen der Tage muss man allerdings aufpassen, was man dazurechnet. Nach ein bisschen Überlegen kommt man darauf, dass man immer die Anzahl der Tage des jeweiligen Vormats hinzuzählen muss.

Das ist im Prinzip genau das, was der Code macht.

Für die Berechnung der Wochen wird einfach die Anzahl der Tage in der Differenz durch 7 geteilt und abgerundet. Der Rest aus dieser Division entspricht dann der Anzahl der restlichen Tage.

Ich hoffe, das war so weit verständlich. :)
 
n'Abend FreedomCall,
sorry, das Wetter am Wochenende war einfach zu schön für Computerspiele ;)
Aber Matthias hat ja professionell - und einiges erfolgreicher - übernommmen.

Ciao,
Martin
 
'n Abend, Herr Namensvetter! ;) :D

Ach hast du's gut - ich darf zurzeit nicht in die Sonne, zumindest nicht mit dem Gesicht und nicht mal für 5 Minuten! :(
Okay, ich könnte diese komische Creme auf meine Fratze (;) :D) schmieren, dann dürfte ich in die Sonne, aber auch nicht sehr lange... :(
Wie dem auch sei, so ist das halt, wenn man gegen "mittelschwere Rest-Akne" kämpft - aber hey, ich hab den Kampf gegen die schwerste Form der Akne gewonnen (obwohl sie bei mir NICHT überall, sondern nur im Gesicht war, was SEHR ungewöhnlich ist), also gewinne ich auch diesen Kampf... ;) :D
(Oh man, ich laber dich hier mit privatem Zeugs zu! :rolleyes: Sorry! :))


Wie dem auch sei, weiter zum Problem:

Matthias: Im PRINZIP sind alle Probleme leicht lösbar - in der Realität bedürfen sie aber manchmal einer völlig abstrusen und verwirrenden Lösung... ;) :D

Zu deinem Beispiel: das Grundprinzip hab ich soweit verstanden, dein Beispiel hingegen nicht! O.o
Ich meine, die Rechnung "22:10 - 20:45" ergibt 01:25, das weiß ich (durch nachrechnen ;) :D) auch.
Nichtsdestotrotz peil' ich nicht ganz, warum du "45 auf 70" rechnest und nicht "45 auf 100" (BtW: bei uns heißt das nicht "auf", sondern "bis" - aber das ist ja egal, ich versteh' ja, was du meinst ;) :D).


Der Rest ist dann soweit einleuchtend - bis auf diesen Passus:

Beim Abziehen der Tage muss man allerdings aufpassen, was man dazurechnet. Nach ein bisschen Überlegen kommt man darauf, dass man immer die Anzahl der Tage des jeweiligen Vormats hinzuzählen muss.

Warum willst du die Anzahl der Tage des Vormonats hinzuzählen?
Und wie stellst du dabei sicher, dass korrekt gerechnet wird (manche Monate haben 30, manche 31, andere 28, teilweise 29)


Viele Fragen - insofern hoffe ich auf viele Antworten! ;) :D

GN8, Martin! :)
 
Zuerst mal sorry für die späte Antwort - aber die Schule droht hier so kurz vor dem Abi tatsächlich nochmal etwas stressig zu werden ;)

FreedomCall hat gesagt.:
Zu deinem Beispiel: das Grundprinzip hab ich soweit verstanden, dein Beispiel hingegen nicht! O.o
Ich meine, die Rechnung "22:10 - 20:45" ergibt 01:25, das weiß ich (durch nachrechnen ;) :D) auch.
Nichtsdestotrotz peil' ich nicht ganz, warum du "45 auf 70" rechnest und nicht "45 auf 100" (BtW: bei uns heißt das nicht "auf", sondern "bis" - aber das ist ja egal, ich versteh' ja, was du meinst ;) :D).
Gegenfrage: Wieso sollte man "45 auf 100" rechnen? Beim schriftlichen Subtrahieren von Zahlen rechnest du ja bspw. als ersten Schritt auch nicht "5 auf 10", wenn du 262 - 15 ausrechnest, sondern "5 auf 12". Dieses 12 ergibt sich einfach dadurch, dass man die "2" nimmt, die Minuenden steht, und die nächsthöhere Stelle dieser Zahl mit einer "1" besetzt. Also wird aus "2" eine "12".

Analog verhält es sich bei den Zeiten. Ich nehme die 10 Minuten vom Minuenden und besetze die nächsthöhere Stelle (die Stunden) mit einer "1" und erhalte somit 1 Stunde + 10 Minuten. Und das sind natürlich 60 Minuten + 10 Minuten = 70 Minuten.

Würde man jetzt beispielsweise mit Tagen und Stunden rechnen, und sagen wir mal... 7d 6h - 3d 17h rechnen, dann würde das so aussehen:
Code:
  7d  6h
- 3d 17h
  1d
--------
  3d 13h
Sprich: 17h auf 6h -> geht nicht, also Übertrag: 17h auf 1d 6h -> 17h auf 24h+6h -> 17h auf 30h = 13h. 13h an, 1d gemerkt. Und dann 4d auf 7d = 3d. 3d an.

Alles klar? ;)

Der Rest ist dann soweit einleuchtend - bis auf diesen Passus:

Warum willst du die Anzahl der Tage des Vormonats hinzuzählen?
Und wie stellst du dabei sicher, dass korrekt gerechnet wird (manche Monate haben 30, manche 31, andere 28, teilweise 29)
Mit den Monaten war es etwas kniffliger. Aber auch hier geht es darum, bei der Berechnung mit Tagen und Monaten die nächsthöhere Stelle mit "1" zu besetzen. Aber wie rechnet man jetzt 1 Monat in Tage um? Am besten mach ich wieder ein Beispiel, vielleicht wird's dann einleuchtend...

Nehmen wir mal an, wir befinden uns auf dem Planeten "Gnarz", auf dem die Monate ziemlich kurz sind. Die ersten vier Monate eines Gnarz-Jahres (Foo, Bar, Fork und Dork) sind 4, 3, 5 und 4 Tage lang. Zwibbeldrop, ein Bewohner von Gnarz, wurde nun am 3. Foo geboren. Momentan haben wir den 2. Dork, und Zwibbeldrop will jetzt wissen, wie alt er heute ist.
Code:
   Foo      Bar     Fork     Dork
 _______  _______  _______  _______
|_______||___.___||___.___||___.___|
|_______||___.___||___.___||___H___|
|___Z___||___o___||___o___||_______|
|___.___|         |___.___||_______|
                  |___.___|
   4d       3d        5d      4d
"Z" kennzeichnet den Geburtstag unseren Gnarzmännchens und "H" den momentanen Gnarztag. Die Punkte bezeichnen den zu berechnenden Zeitraum. Wir wollen also folgendes berechnen:
Code:
  4m 2d
- 1m 3d
-------
Also Schema F angewandt und gedacht: 3d auf 1m 2d sind...? Hm. Was wollen wir da eigentlich in diesem Schritt berechnen? Ach ja, die Tage der Zeitdifferenz. Aber da ist es doch vollkommen egal, in welchem Monat Zwibbeldrop Geburtstag hatte - so lange der Tag des Monats gleich bleibt (der 3.), kann er auch am 3. Bar oder am 3. Fork (die "o" im Kalender) gehabt haben. Wenn wir seinen Geburtstag in Monatsschritten verschieben, ändert sich am Alter von Zwibbeldrop nur der Monatsanteil. Prima. Aber bringt uns das? Wir können nun die Berechnung der Tagesdifferenz vereinfachen, indem wir den Geburtstag auf den 3. Fork legen - also auf den Monat, der vor dem Dork kommt. (In den Dork selber können wir ihn natürlich nicht verlegen, denn sonst wäre unser kleiner Kamerad ja noch überhaupt nicht geboren.)

Aber wie berechnen wir jetzt die Tage zwischen dem dem 3. Fork und dem 2. Dork? Zeichnen wir den Kalender von Fork und Dork doch mal etwas anders:
Code:
 _______
|___.___| <- 1. Fork
|___.___|
|___o___|
|___.___|
|___.___|
 _______
|___.___| <- 1. Dork
|___x___|
|_______|
|_______|
Jetzt sollte man es schon fast auf den ersten Blick erkennen: Wenn wir die entsprechenden Tage vom 1. Fork aus zählen, dann ist der 3. Fork auf Position 3. Der 2. Dork liegt auf Position 5 + 2 (5 Tage vom Fork + 2. Tag vom Dork). Und die Differenz daraus... 3 auf 7... Moment, das kommt uns doch bekannt vor! Genau, das ist doch 3d auf 1m 2d, nur dass wir 1m durch 5d ersetzt haben. Und diese 5d sind - genau, die Länge des Vormonats in Tagen. Flugs ausgerechnet ergibt das 4d. Der Rest der Rechnung gestaltet sich einfach: 4d an, 1m gemerkt:
Code:
  4m 2d
- 1m 3d
  1m
-------
  2m 4d

Hurra, fertig! Zwibbeldrop ist also 2 Monate und 4 Tage alt.

Das ganze verläuft absolut analog für Erdenjahre und Monate. Und die Länge der Monate ermittle ich in meinem Code mit der schönen Funktion monthdays (die steht ganz am Anfang :)), die ich so aufrufe: $diff['D'] += monthdays($t2['M']-1, $t2['Y']); Warum, sollte nun hoffentlich klar sein :)


So, und jetzt muss ich los nach Gnarz. Mit 2 Monaten und 4 Tagen ist man dort nämlich volljährig, was immer mit einem rauschenden Fest gefeiert wird. Und da ich Zwibbeldrop recht gut kenne... ;-)
 
Und siehe da, ein knapper Monat zog ins Land, doch nichts geschah... hab ich dich jetzt vollkommen verschreckt mit meinem Beispiel? Würde mich zumindest über ein Lebenszeichen freuen, nicht dass ich mir die hübsche Geschichte von Zwibbeldrop ganz umsonst ausgedacht hab ;)
 
Matthias Reitinger hat gesagt.:
Und siehe da, ein knapper Monat zog ins Land, doch nichts geschah... hab ich dich jetzt vollkommen verschreckt mit meinem Beispiel? Würde mich zumindest über ein Lebenszeichen freuen, nicht dass ich mir die hübsche Geschichte von Zwibbeldrop ganz umsonst ausgedacht hab ;)

Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah
Ich bin nicht würdig - Oh Meister, kannst du mir vergeben :-(

Schlicht und ergreifend die Lehrer(innen) sind schuld: 5 Klausuren in 3 Tagen + Prüfungs-(Vorbereitungs-)-Stress und meine leichte Vergesslichkeit sind die Gründe für mein Versagen! :rolleyes: :(

Wie dem auch sei: ab dieser Stelle hat sich mein Hirn ausgeklinkt:
Am besten mach ich wieder ein Beispiel, vielleicht wird's dann einleuchtend...

Deshalb wär' eine Erklärung dieser Stelle (und des ganzen Rests) SEEEEEEEEEEHR hilfreich! ;) :)
 
Es sei dir verziehen, ich stecke ja auch grade voll im Prüfungsstress :rolleyes:

Aber ich weiß leider nicht, wie ich dir das mit dem Übertrag der Tage auf Monate noch anders erklären soll. Entweder du beißt dich durch mein Beispiel durch (ich find es eigentlich sehr anschaulich... zeichne dir vielleicht einfach mal selber einen Kalender auf und versuch es nachzuvollziehen), oder du erklärst, an welcher Stelle genau das Verständnis den Bach runter geht.

Derweil viel Glück und Erfolg bei deinen Prüfungen :)
 
Zurück