Algorithmus für Monatsdifferenz



  • Haha, der war gut und Mai - Juni = -1.



  • EOP schrieb:

    Haha, der war gut und Mai - Juni = -1.

    -1 % 12 = 11 🤡

    //Edit: Einfach vergessen.... ich brauche erstmal noch ein Kaffee



  • 3 - 4 = -1, da braucht man nicht rummodulen.

    Irgendwie haben wir die eigentliche Aufgabenstellung etwas aus den Augen verloren. Kommt mir jedenfalls so vor. 🙂



  • EOP schrieb:

    3 - 4 = -1, da braucht man nicht rummodulen.

    11 Monate wären es von Juni - Mai, daher kam die Aussage ursprünglich.

    EOP schrieb:

    Irgendwie haben wir die eigentliche Aufgabenstellung etwas aus den Augen verloren. Kommt mir jedenfalls so vor. 🙂

    Kommt mir auch so vor 😃



  • Schlangenmensch, du hast nachtfeuers post wohl nicht genau angesehen und analysiert.



  • Doch... ich denke schon. Nur hat ein Gedankenfehler meinerseits meine nicht ernst gemeinte Anmerkung ziemlich kaputt gemacht. Daher eine kurze Erklärung:

    Du hast zu Nachtfeuers Post den entsprechenden Witz mit Mai - Juni gemacht.
    Ich habe dann (falsch) gedacht, ah, Mai - Juni, sind doch 11 Monate, haha -> also wende ich auf ein "falsches" Ergebnis, eine in einem anderen zusammenhang mögliche Berechnung an und bekomme (zufällig) das richtige Endergebnis.



  • Ich mache keine Witze - bin ein todernster Mensch.



  • Alles klar, dann weiß ich Bescheid.



  • ---



  • Ganz so ausschweifend hättest du das auch nicht kommentieren müssen, Gregor.



  • EOP schrieb:

    Ganz so ausschweifend hättest du das auch nicht kommentieren müssen, Gregor.

    Ich hatte festgestellt, dass das, was ich geschrieben hatte, unausgereift war, wollte das aber auch nicht mehr korrigieren.

    ...und eigentlich sollte der Threadersteller dieses Problemchen zuerst mal für sich selbst klar und deutlich formulieren und dann ganz alleine lösen. Das gehört zu dieser Art von Problemen, die man beim Programmieren drei mal am Tag löst, auch wenn man dafür vielleicht mal 10 Minuten knobeln muss. Wenn jemand an so etwas scheitert und nach einer vorgefertigten Lösung ruft, sollte er lieber etwas anderes machen als programmieren. Dann fehlt nämlich sowohl Talent, als auch Interesse oder auch einfach ganz grundlegendes Verständnis mathematischer Operationen, die man beim Programmieren andauernd braucht, wie zum Beispiel die Subtraktion, die Modulo-Berechnung, das Bestimmen des Minimums zweier Werte, die Bestimmung eines Absolutbetrags eines Werts.

    @Threadersteller: Sorry für dieses Arschlochkommentar. Gib Dir nen Ruck und versuch es noch mal selbst ein bisschen. Es ist nicht so schwer. 😉



  • Weil du recht hast, Gregor, kamen auch nur wenige konstruktive Beiträge.
    Das grundlegende Problem der Denkfaulheit haben anscheinend auch Andere erkannt.


  • Mod

    @Gregor du hast die bereits von Schlangenmensch angedeutete Kombinatorik vergessen.



  • SeppJ schrieb:

    Der Algorithmus, um Differenzen zu berechnen, nennt sich Subtraktion.

    Stimmt, es ist einfach eine Frage der Subtraktion, war in der Zwischenzeit auch selber drauf gekommen, der Post im Forum hat quasi dazu geführt.

    Mann kann ja einfach Jahr für Jahr rechnen, also ensprechend von November - Dezember= (12-11)+1 = 2 und dann nochmal einfach 3 dazu addieren. (Januar-März).
    Vorher müßte man natürlich noch die Jahre abgleichen, um festzustellen, welcher Wert der geringere ist.

    SeppJ schrieb:

    Du möchtest aber vielleicht gleich etwas weiter denken. Ist die Differenz zwischen 30.11. und 1.12. wirklich 1 Monat? Ist die Differenz zwischen 1.12. und 31.12. wirklich 0 Monate?

    Neiin, natürlich nicht :-), mein Ansatz wäre der, ein Datum in 3 Variablen aufzuteilen, also Jahr, Monat, Tag. Dann werden zunächst alle wichtigen Eigenschaften abgefragt, also z.B. Schaltjahr, 30 Tage oder 31 Tage, etc. Anschließend wird, wenn notwendig, subtrahiert.

    SeppJ schrieb:

    Du wirst jedoch feststellen, wenn man weiter denkt, dass ein Datumsrechner dann sehr schnell sehr kompliziert wird.

    Ja, das habe ich mittlerweile auch festgestellt, daß ein eigentlich ganz einfacher zu scheinender Datumsrechner für Hobbyprogrammierer(bisschen VB und bisschen C++, bestenfalls Grundlagenkenntnisse und Inselwissen) nicht mal eben zu programmieren ist. Aber Zeit ist nicht das Problem 🙂



  • @Datumsrechner:
    Kleiner Tipp. Schau dir mal die Funktionen aus time.h an.


  • Mod

    Datumsrechner schrieb:

    SeppJ schrieb:

    Du möchtest aber vielleicht gleich etwas weiter denken. Ist die Differenz zwischen 30.11. und 1.12. wirklich 1 Monat? Ist die Differenz zwischen 1.12. und 31.12. wirklich 0 Monate?

    Neiin, natürlich nicht :-), mein Ansatz wäre der, ein Datum in 3 Variablen aufzuteilen, also Jahr, Monat, Tag. Dann werden zunächst alle wichtigen Eigenschaften abgefragt, also z.B. Schaltjahr, 30 Tage oder 31 Tage, etc. Anschließend wird, wenn notwendig, subtrahiert.

    Wie schon gesagt: Das wird schnell sehr kompliziert. Dein Ansatz geht schon daneben: Ist nun der Abstand zwischen dem 1. Februar und dem 1. März gleich einem Monat und 0 Tagen, aber der Abstand zwischen 1. Dezember und 31. Dezember ist 0 Monate und 30 Tage? Dein Ansatz würde sagen: Ja!

    Der beste Tipp den man zu Datumsrechnungen daher geben kann: Tu's nicht! Wirklich nicht. Nutz fertige Bibliotheken, die haben viel Denkarbeit darein gesteckt und es ist keine Schande, auf der Arbeit anderer Leute aufzubauen. Im Gegenteil ist es ziemlich peinlich, wenn man es selber und falsch macht.



  • SeppJ schrieb:

    Wie schon gesagt: Das wird schnell sehr kompliziert. Dein Ansatz geht schon daneben: Ist nun der Abstand zwischen dem 1. Februar und dem 1. März gleich einem Monat und 0 Tagen, aber der Abstand zwischen 1. Dezember und 31. Dezember ist 0 Monate und 30 Tage? Dein Ansatz würde sagen: Ja!

    Das sehe ich nicht so. Wenn man ein Datum in 3 Variablen(Jahr, Monat, Tag) aufteilt, hat man die Grundlage, um alle Datumsdifferenzen ausrechnen zu können.(bezogen auf den aktuellen Kalender).
    Die Differenz zwischen dem 01.02. und dem 01.03. wäre 1 Monat + 1 Tag.
    Deswegen gibt es da für mich kein grundsätzliches Problem bei der Berechnung.
    Man hätte einmal die Variablen M1=2 und M2=3, Zusätzlich T2=1.
    Sofern M3>(evtl. und/oder <)M1 muß es je nach Differenz mindestens ein Monat + T sein. Die restlichen Tage werden dann durch T2 bestimmt.

    Die Differenz zwischen dem 01.12. - 31.12. wäre genau einen Monat.
    Dadurch, daß M1=M2 kann es nicht mehr als ein Monat sein.

    Ich sehe allerdings ein, daß viele Regeln einzuprogrammieren sind, wo man schnell die Übersicht verlieren kann.

    SeppJ schrieb:

    Der beste Tipp den man zu Datumsrechnungen daher geben kann: Tu's nicht! Wirklich nicht. Nutz fertige Bibliotheken, die haben viel Denkarbeit darein gesteckt und es ist keine Schande, auf der Arbeit anderer Leute aufzubauen. Im Gegenteil ist es ziemlich peinlich, wenn man es selber und falsch macht.

    Das stimmt, leider stehen mir fertige Bibliotheken aus ganz bestimmten Gründen(die ich wiederum aus ganz bestimmten Gründen nicht erläutern kann:-), nicht zur Verfügung. Deswegen muß ich das selber programmieren, bin aber der Auffassung, daß das schaffbar ist auch als Hobbyprogrammierer.



  • Datumsrechner schrieb:

    Die Differenz zwischen dem 01.12. - 31.12. wäre genau einen Monat

    Die Differenz wäre nicht ein Monat sondern 30 Tage, wobei der Dezember 31 Tage hat, aber bei dir scheint die Differenz immer Differenz+1 zu sein. Fail.

    EDIT:
    Nach deiner verqueren Logik müsste die Differenz vom 1.1.2017 und dem 1.1.2017 1 sein.



  • EOP schrieb:

    Datumsrechner schrieb:

    Die Differenz zwischen dem 01.12. - 31.12. wäre genau einen Monat

    Die Differenz wäre nicht ein Monat sondern 30 Tage, wobei der Dezember 31 Tage hat, aber bei dir scheint die Differenz immer Differenz+1 zu sein. Fail.

    Warum Fail? Wenn man Monatsdifferenzen berechnen will, kann man doch volle Monate immer mit 1 ansetzen, je nachdem, wofür man die Berechnungen braucht.

    EOP schrieb:

    EDIT:
    Nach deiner verqueren Logik müsste die Differenz vom 1.1.2017 und dem 1.1.2017 1 sein.

    Exakt. Das wäre genau ein Tag.

    Es gilt: Volle Jahre->Volle Monate->verbleibende Tage.



  • Warum willst du überhaupt eine Differenz in Monaten angeben wo doch ein Monat nicht genau definiert ist. Wieviele Tage hat ein Monat?


Anmelden zum Antworten