Mit Uhrzeiten rechnen

  • Hallo zusammen,

    wie der Titel schon vermuten lässt, würde ich gerne ein Programm schreiben, welches mit Uhrzeiten rechnen kann.

    Das heißt: Im Endeffekt eine Art erweiterte Arbeitszeiterfassung. Wann komme, wann mache ich mittag, wann gehe ich. Daraus die Soll / Ist Zeiten auswerten und speichern. Das ganze auch mit Wochenstunden.

    Auch sollen auf Projekte bezogene Zeiten gespeichert werden.

    Ich habe auch schon im Kopf wie ich das machen will. Also das Schema.

    Die einzige Sache: wie bekomme ich vernünftige Zeiten raus? Also ich fange um 8 an. Habe um 12 bis 13:00 Pause. Verlasse dann um 17:00 die Firma.

    Mein soll: 8Std.

    Zum Beispiel wenn ich Überstunden habe, sollte da folgendes stehen +00:20.

    Habt ihr da eine Idee? Bin da am verzweifeln:(

    Danke im Voraus!

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

    • Offizieller Beitrag

    Die Date-UDF ist die Lösung:

  • Hallo Mikki !

    Hier eine leicht erweiterte Variante zum Beispiel von Oscar :

    - es können nun bis zu 3 Pausen eingetragen werden ( 0 = keine Pause)

    - es wird auch ein Tageswechsel (also bei Nachtschichten) berücksichtigt

    - die Berechnung erfolgt auf Basis von Minuten, da manche Leute ja z.B. um 07:45 Uhr anfangen :P

    Die Erfassung von Überstunden habe ich erst mal weggelassen - das bekommst Du sicher selbst hin ;)

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Guten Morgen zusammen,

    vielen Dank für die Beispiele.

    Hier mal mein Code:

    Soweit funktioniert das. Nur leider funktioniert die Berechnung der Differenz nicht. Ich habe jetzt extra mal auf 's' gestelllt, damit man das schneller testen kann.

    Und im Feld "Ist" kommt leider immer 0 raus.

    Habe ich da irgendwie nen groben Fehler drin? (Würde mich nicht wundern) :D

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

  • Hallo Mikki,

    bei dir fehlt das Datum in der Berechnung.

    $Arbeit = _DateDiff('s', "1970/01/01 " & $aNowTime[0], "1970/01/01 " & $aNowTime[3])

    Gruß gmmg

  • Hallo gmmg,

    okay das funktioniert. Das muss mir mal jetzt jemand erklären :D warum muss ich da ein fiktives Datum eintragen, damit das funktioniert?

    Mfg Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

  • Hallo Mikki,

    ich denke mal da muss sogar das richtige Datum rein. Welches du z.B. so umformatieren kannst.

    ;Beispiel

    #include <Array.au3>

    MsgBox(0,"", _NowDate())

    $nowDate_array = StringSplit(_NowDate(),".")

    _ArrayDisplay($nowDate_array )

    $nowDate_new = $nowDate_array [3] & "/" & $nowDate_array [2] & "/" & $nowDate_array [1]

    MsgBox(0,"",$nowDate_new)

    $Arbeit = _DateDiff('s', $nowDate_new & " " & $aNowTime[0], $nowDate_new & " " & $aNowTime[3])

    Die Variable $nowDate wird von dir schon genutzt, deshalb habe ich die mal $nowDate_new genannt.

    Gruß gmmg

    Einmal editiert, zuletzt von gmmg (2. November 2018 um 09:45)

  • Hallo,

    ja habe es auch in der Hilfe gesehen. Hatte aber den Denkfehler, dass das optional wäre.

    Super vielen Dank an euch :)

    MfG Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

  • Das aktuelle Datum kannst du etwas schneller mit StringRegExpReplace bearbeiten, wie die Hilfe zeigt:

    $nowDate_new = StringRegExpReplace(_NowDate(), '(\d{2}).(\d{2}).(\d{4})', ' $3/$2/$1 ')

    Grüße autoiter

  • Das aktuelle Datum kannst du etwas schneller mit StringRegExpReplace bearbeiten, wie die Hilfe zeigt:

    $nowDate_new = StringRegExpReplace(_NowDate(), '(\d{2}).(\d{2}).(\d{4})', ' $3/$2/$1 ')

    Hallo autoiter !

    So wie Mikki die Variable $Arbeit berechnet, muss bei ' $3/$2/$1 ' das führende Leerzeichen 'raus, sonst funktioniert es nicht -> statt ' $3/$2/$1 ' also '$3/$2/$1 ' verwenden.

    AutoIt
    Local $nowDate_new = StringRegExpReplace(_NowDate(), '(\d{2}).(\d{2}).(\d{4})', '$3/$2/$1 ')
    $Arbeit = _DateDiff('s', $nowDate_new & $aNowTime[0], $nowDate_new & $aNowTime[3])

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • ich denke mal da muss sogar das richtige Datum rein.

    wenn er nur mit der Zeit rechnen will genügt auch ein fiktives Datum. Für eine echte Arbeitszeiterfassung mit Dokumentation der Zeiten sind aber auch echte Daten erforderlich. Afair gibt es schon einige Skripte hierfür im Forum.

  • Hallo Mikki wenn du wirklich vor hast eine Arbeitszeiterfassung zu machen, dann mach doch mal einen Suchlauf bei der

    Suchmaschine deines geringsten Misstrauens und du wirst feststellen, daß sowas so gut wie immer mit Excel realisiert wird.

    Ich hatte früher auch mal sowas gebaut in Excel. Da wurden Plus und Minus Stunden besonders markiert und auch Feiertage waren einfach

    zu realisieren. Und vor allem bist du mit Excel wesentlich flexibler als mit Autoit. Kleine Änderungen erfordern in Excel ein paar Sekunden

    oder höchstens Minuten wo du hier in Autoit unter Umständen das halbe Script umschreiben darfst. Und im Rechnen ist Autoit auch keine Granate,

    das konnte in den Neunziger Jahren jeder bessere Taschenrechner um Welten besser als Autoit.

    Also wie gesagt Arbeitszeiten oder Stunden erfassen ist in Excel wesentlich flexibler und leichter machbar. Nur ein Tipp von mir.