0

Monate zu Datum addieren

Hallo,

 

ich habe ein Datum und möchte als Funktion einfach nur, z.Bsp.: 6 Monate dazurechnen. Ich finde aber keine Möglichkeit die Monate dazu zu addieren. Einfach nur 180 Tage wäre eben nicht korrekt.

Über eine schnelle Hilfe wäre ich sehr dankbar.

 

Liebe Grüße

 

Chreve

5 replies

null
    • Leonid_Semik
    • 6 yrs ago
    • Reported - view
    • Christoph
    • 6 yrs ago
    • Reported - view

    Vielen Dank. Das habe ich leider in der Suche nicht gefunden.

    • Olaf_Nensel
    • 3 mths ago
    • Reported - view

    Hallo Leonid,

    heute bin ich über ein Problem Deiner Lösung gestolpert und kann gar nicht glauben, dass, obwohl diese schon seit 6 Jahren im Netz steht, über dieses Problem hier - so wie es aussieht - wohl noch nie diskutiert wurde.

    –––

    let myDate := date(2023, 1, 31);
    date(year(myDate), month(myDate) + 1, day(myDate))
    "Ergebnis: 03.03.2023";

    let myDate := date(2023, 3, 31);
    date(year(myDate), month(myDate) + 1, day(myDate));
    "Ergebnis: 01.05.2023";

     –––

    Offensichtlich zählt Ninox bei dieser Lösung nicht monatsweise, sondern erhöht je "Monat" immer um 30 Tage. Bei rechtlichen Fristen kann das fatal sein. Wird mir eine behördliche Entscheidung am 30. Januar 2023 zugestellt, gegen die ich innerhalb eines Monats einen Rechtsbehelf einlegen kann, dann beginnt die Monatsfrist am 31. Januar 2023 (der Zustelltag zählt nicht mit, siehe § 187 BGB) und endet am 29. Februar 2023 (siehe § 188 Absatz 3 BGB).

    Viele Grüße

    Olaf

      • Olaf_Nensel
      • 3 mths ago
      • Reported - view

      Mein Diskussionsvorschlag:

      addmonth

      Die Funktion nimmt einen Datumswert als erstes Argument und benötigt ein zweites Ganzzahlargument, das die Anzahl der Monate angibt, die dem ersten Argumentwert hinzugefügt werden sollen. Das zweite Argument kann positiv oder negativ sein.

      Syntax

      addmonth(date, number)

      Rückgabewert

      date

      Beispiele

      let myDate := date(2023, 1, 31);
      addmonth(myDate, 2)

      Ergebnis: 31.03.2023

      let myDate := date(2023, 1, 31);
      addmonth(myDate, -3)

      Ergebnis: 31.10.2022

      let myDate := date(2023, 1, 31);
      addmonth(myDate, 1)

      Ergebnis: 28.02.2023 (Der Februar hat keinen 31. Tag. Daher fällt der Rückgabewert im Jahr 2023 auf den 28., den Monatsletzten dieses Monats; gemäß § 188 Absatz 3 BGB.)

       

      CODE DER FUNKTION

      –––

      function addmonth(myDate_1 : date,monthDiff : number) do
          let myDate_2 := date(year(myDate_1), month(myDate_1) + monthDiff, day(myDate_1));
          if month(myDate_1) + monthDiff != month(myDate_2) then
              date(year(myDate_1), month(myDate_1) + 1 + monthDiff, 0)
          else
              date(year(myDate_1), month(myDate_1) + monthDiff, day(myDate_1))
          end
      end;

      –––

       


      Diese Lösung nutzt eine spezielle Möglichkeit der date-Funktion von Ninox:

      Wenn Sie „0“ als Wert für den Tag angeben, wird der letzte Tag des vorangegangenen Monats zurückgegeben. Dies ist eine praktische Art, den letzten Tag eines Monats zu bestimmen. 

      https://docs.ninox.com/de/skripten/funktionen-uberblick/funktionen/date

      • Olaf_Nensel
      • 3 mths ago
      • Reported - view

      Der ursprüngliche Code oben berücksichtigte Jahresübergänge nicht und führt deshalb dort zu fehlerhaften Ergebnissen. 

      Wegen des speziellen Anwendungsbereichs habe ich der Funktion einen entsprechenden Namen gegeben, alt: "addmonth(date, number)" neu: plusFristMonatBgb(date, number), und die Lesbarkeit des Codes geringfügig verbessert:

      –––

      function plusFristMonatBgb(myDate_1 : date,monthDiff : number) do
          let myDate_2 := date(year(myDate_1), month(myDate_1) + monthDiff, day(myDate_1));
          if (month(myDate_1) + monthDiff) % 12 = month(myDate_2) % 12 then
              myDate_2
          else
              date(year(myDate_1), month(myDate_1) + monthDiff +1, 0)
          end
      end;

      –––

Content aside

  • 3 mths agoLast active
  • 5Replies
  • 3168Views
  • 1 Following