Herbert: Berechnungen mit Datum und Arbeitstagen

Hallo, ich bin neu hier und habe ein Problem.

Ich möchte folgende Berechnung durchführuen: Datum(Einreise) - Arbeitstage = Datum(Abgabe)

Ich habe jedoch keine Erfahrungen in sachen JAVA und durchforste schon seit Stunden das Internet und konnte nichts finden.

Meine Vorabeit:

<p><lable>Tag der Einreise: <input type="date" id="Einreise" value=""></lable></p>
<p><lable>Gesamtfrist (<abbr title="Arbeitstage &#10;(ohne Feiertag/e)">AT</abbr>): <input type="number" id="Frist" value="10" min="1" max="100" step="1"></lable>
<input type="button" value="berechne Abgabe" onclick="berechneFrist()"></p>
<lable>Abgabe RFV: <input type="date" id="Abgabe" value="" readonly></lable>
<script>
function berechneFrist() {
alert('Die Berechnung funktioniert noch nicht');
}
</script>

Für Eure Zeit & Hilfe sag ich schon mal vielen Dank.

  1. Servus!

    Hallo, ich bin neu hier und habe ein Problem.

    Ich möchte folgende Berechnung durchführuen: Datum(Einreise) - Arbeitstage = Datum(Abgabe)

    Ich habe jedoch keine Erfahrungen in sachen JAVA und durchforste schon seit Stunden das Internet und konnte nichts finden.

    JAVA wird in solchen browserbasierten Webseiten nicht verwendet, dort nimmt man JavaScript. Der fehler passiert vielen am Anfang.

    Meine Vorabeit:

    <p><lable>Tag der Einreise: <input type="date" id="Einreise" value=""></lable></p> <p><lable>Gesamtfrist (<abbr title="Arbeitstage &#10;(ohne Feiertag/e)">AT</abbr>): <input type="number" id="Frist" value="10" min="1" max="100" step="1"></lable> <input type="button" value="berechne Abgabe" onclick="berechneFrist()"></p> <lable>Abgabe RFV: <input type="date" id="Abgabe" value="" readonly></lable> <script> function berechneFrist() { alert('Die Berechnung funktioniert noch nicht'); } </script>

    Für Eure Zeit & Hilfe sag ich schon mal vielen Dank.

    Da sind einige Klöpse dirn.

    z.B. lable heißt label.

    Schau Dir mal dieses Beispiel an und versuche es zu verändern:

    Herzliche Grüße

    Matthias Scharwies

    --
    Einfach mal was von der ToDo-Liste auf die Was-Solls-Liste setzen.“
    1. Hallo Mstthias, vielen Dank für die wirklich schnelle Anwort. Ja, gesehen, danke. Diese Buchstabendreher passieren mir ständig. Sollte langsamer tupen. 😉 Ja, mit JAVA meine ich natürlich JAVAScript, sorry. Vielen Dank auch für den Link. Weis noch nicht, wie ich die Arbeitstage hier einbinden kann.

  2. Hallo Herbert,

    Datum(Einreise) - Arbeitstage (ohne Feiertage) = Datum(Abgabe)

    "Arbeitstag" ist mehrdeutig. Der Samstag ist ein Werktag. Ist er für Deine Zwecke ein Arbeitstag?

    Definiere als nächstes "Feiertag". Beachte dabei

    • bewegliche Feiertage (in christlich orientierten Kulturen auf Ostern basierend)
    • regionale Feiertage (nach Staat / Bundesland / Gemeinde)
    • stille Tage wie Heiligabend oder Silvester, wo ggf. nicht gearbeitet wird

    Deine beiläufig formulierte Anforderung "Arbeitstage ohne Feiertage" ist eine der Hammeraufgaben der Datumsberechnung.

    Wenn es nur um die Wochenenden ginge, könnte man den AT Wert durch 5 teilen und abrunden. Das sind die Arbeitswochen W, die abzuziehen sind. Der Rest dieser Division sind die weiteren Tage T. Beispiel: Wenn AT=23, sind das 4 Arbeitswochen und 3 Tage. Diese 3 Tage zieht man als erstes vom Anreisetag ab. Kommt man dabei auf einem Sa oder So heraus, geht man auf den Freitag zurück. Danach zieht man die Anzahl der Wochen mal 7 ab.

    Nur - in dieser Zeit können null oder mehr Feiertage liegen. Die kann man zählen, und entsprechend viele weitere Tage abziehen. In der so abgezogenen Frist können wieder Feiertage liegen. Die kann man zählen, und entsprechend viele weitere Tage abziehen. In der so abge.... Man muss eine Schleife bilden und das so lange wiederholen, bis man keinen Feiertag mehr drin hat.

    Aber dafür braucht man eine Übersicht der zu berücksichtigenden Feiertage. Die willst Du sicher nicht für jedes Jahr von Hand eingeben. Also musst Du die beweglichen Feiertage berechnen und wissen, welche potenziellen Feiertage für die Rechnung relevant sind. Da Feiertage je nach kulturellem Kontext verschieden sind, kommt nun die Frage: Für welchen Kontext muss das gemacht werden? Sag nicht "Deutschland". Da gibt's schon mehrere. Und wenn Du "Welt" sagst - viel Spaß mit Ramadan, Hindufesten, chinesischem Kalender und vielem, was ich in meiner globalen Ignoranz noch nie gehört habe.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hallo,

      "Arbeitstag" ist mehrdeutig. Der Samstag ist ein Werktag.

      bei der Bahn schon - nach allgemein üblicher Auffassung aber nicht.
      Aber die Frage, ob der Samstag ein Werktag sei, wird immer wieder sehr kontrovers diskutiert.

      Live long and pros healthy,
       Martin

      --
      Wer respektiert werden will, sollte zunächst damit anfangen, andere zu respektieren.
      1. Hi,

        "Arbeitstag" ist mehrdeutig. Der Samstag ist ein Werktag.

        bei der Bahn schon - nach allgemein üblicher Auffassung aber nicht.

        Also bei z.B: Halteverbotsschildern mit Zusatzschild "an Werktagen" darfst Du in Deutschland auch Samstag nicht halten. Außer es ist an dem Samstag zufällig auch Feiertag.

        Ist also nicht nur bei der Bahn so, daß der Samstag als Werktag gilt.

        cu,
        Andreas a/k/a MudGuard

    2. Hi,

      Definiere als nächstes "Feiertag". Beachte dabei

      • bewegliche Feiertage (in christlich orientierten Kulturen auf Ostern basierend)

      Nicht immer. Buß- und Bettag ist nicht Osterabhängig. Sondern Adventsabhängig.

      Wenn es nur um die Wochenenden ginge, könnte man den AT Wert durch 5 teilen und abrunden. Das sind die Arbeitswochen W, die abzuziehen sind. Der Rest dieser Division sind die weiteren Tage T. Beispiel: Wenn AT=23, sind das 4 Arbeitswochen und 3 Tage. Diese 3 Tage zieht man als erstes vom Anreisetag ab. Kommt man dabei auf einem Sa oder So heraus, geht man auf den Freitag zurück. Danach zieht man die Anzahl der Wochen mal 7 ab.

      Nur - in dieser Zeit können null oder mehr Feiertage liegen. Die kann man zählen, und entsprechend viele weitere Tage abziehen.

      Aber nur, wenn diese Feiertage nicht auf einen Sonntag fallen - denn dann sind sie ja schon als Sonntag weggerechnet worden.

      cu,
      Andreas a/k/a MudGuard

      1. Hallo MudGuard,

        Buß- und Bettag ist nicht Osterabhängig.

        Ja. Und nur in Sachsen.

        Aber nur, wenn diese Feiertage nicht auf einen Sonntag fallen

        Ja, natürlich. Aber die Wochentagszugehörigkeit eines beweglichen Feiertages ist immerhin fix. Dafür muss man bei den festen Feiertagen den Wochentag bestimmen, um zu wissen, ob man sie abziehen muss oder nicht.

        Erwähnte ich schon den Hammercharakter der kleinen Aufgabe?

        Dafür müsste man eine Lib bauen. Ob feiertag.js dafür hinreicht?

        Rolf

        --
        sumpsi - posui - obstruxi
      2. Hallo,

        Aber nur, wenn diese Feiertage nicht auf einen Sonntag fallen - denn dann sind sie ja schon als Sonntag weggerechnet worden.

        und ich bin schon seit Jahrzehnten der Meinung, dass in diesem Fall der Feiertag im Interesse der Arbeitnehmer den darauffolgenden Montag zu einem arbeitsfreien Tag machen sollte.

        Live long and pros healthy,
         Martin

        --
        Wer respektiert werden will, sollte zunächst damit anfangen, andere zu respektieren.
        1. Hi,

          Aber nur, wenn diese Feiertage nicht auf einen Sonntag fallen - denn dann sind sie ja schon als Sonntag weggerechnet worden.

          und ich bin schon seit Jahrzehnten der Meinung, dass in diesem Fall der Feiertag im Interesse der Arbeitnehmer den darauffolgenden Montag zu einem arbeitsfreien Tag machen sollte.

          nicht nur, wenn der Feiertag auf einen Sonntag fällt - Samstag als Feiertag ist noch blöder - kein Tag arbeitsfrei, und keine Möglichkeit, einzukaufen … - siehe 1. Mai 2021 …

          cu,
          Andreas a/k/a MudGuard

          1. Hallo,

            und ich bin schon seit Jahrzehnten der Meinung, dass in diesem Fall der Feiertag im Interesse der Arbeitnehmer den darauffolgenden Montag zu einem arbeitsfreien Tag machen sollte.

            nicht nur, wenn der Feiertag auf einen Sonntag fällt - Samstag als Feiertag ist noch blöder - kein Tag arbeitsfrei, und keine Möglichkeit, einzukaufen … - siehe 1. Mai 2021 …

            stimmt, daran habe ich ja gar nicht gedacht! Das ist ja ganz übel!

            Geschmackssache ist auch, was mein Arbeitgeber bei Brückentagen macht - also bei Feiertagen, die auf einen Dienstag oder Donnerstag fallen. Dann ist nämlich am Montag bzw. Freitag zum Wochenende hin die Firma zu, was die Arbeitnehmer freut. Allerdings wird dieser Tag dann zwangsweise als Urlaubs- oder Gleittag verrechnet, was manche Kollegen weniger freut.

            Live long and pros healthy,
             Martin

            --
            Wer respektiert werden will, sollte zunächst damit anfangen, andere zu respektieren.
    3. Hallo Rolf,

      vielen Dank für deinen Beitrag.

      Mit Arbeitstage (AT) meine die Wochentage Mo-Fr, ohne Wochenende (Sa + So) und ohne mögliche Feiertage die in die Woche oder auch auf ein WE fallen.

      "Hammeraufgabe" ohh, ich dachte mit dem Ausschluss der Feiertage wäre es einfacher.

  3. EIN (einer von vielen Ansätzen), aber in PHP

    https://code.fastix.org/Projekte/PHP:Feiertage/

    Kannst das ja umschreiben - nach dem Motto, wer EINE (höhere) Programmiersprache kann, kann sie irgendwie ALLE.

    1. Hallo Raketenzielseher,

      vielen Dank für Deinen Beitrag. Muss die ganze PHP geschichte nicht auf einem Server liegen? Dies kann ich leider so nicht umsetzten, da ich keinen Zugriff auf einen Server habe, fals ich richtig liege.

      1. Muss die ganze PHP geschichte nicht auf einem Server liegen?

        Freilich muss diese das. Aber das Skript ist auch eine Bauanleitung wie Du das in Javascript realisieren könntest.

        Da geht es im Kern um die völlig unterschiedlichen Berechnungsmodi von Feiertagen:

        • Festes Datum (e.g. 1. Mai)
        • Ostern +Offset in Tagen (e.g. Pfingsten)
        • Vierter Advent + (negatives) Offset in Tagen (e.g. Buß- und Bettag)
        $dLastAdvent = 24 - date( 'w', mktime( 0, 0, 0, 12, 24, $jahr ) );
        

        Du musst also z.B. nur heraussuchen, was das macht und das in Javascript umsetzen um zu berechnen, wie der 4. Advent berechnet wird. Davon dann den Offset in Tagen abziehen und schon hast Du das Datum für den Buß- und Bettag…

        Für Ostern gibt es in Javascript sicherlich auch was fertiges: https://stackoverflow.com/questions/1284314/easter-date-in-javascript

        Übrigens hab ich dafür auch wichtige Funktionen für MS-Excel (als „Makro“ bzw. selbst definierte Funktionen) bereit gestellt: https://code.fastix.org/Projekte/Excel%3AVBA%3AFeiertage/