Berechnung der Zeitdifferenz zweier Uhrzeiten

Startseite Foren Deutsches LiveCode-Forum Berechnung der Zeitdifferenz zweier Uhrzeiten

Ansicht von 6 Antwort-Themen
  • Autor
    Beiträge
    • #3198
      gfz
      Teilnehmer

      Freunde und Eperten von Livecode!
      Ich möchte eine kleine Anwendung zur Erfassung meiner Überstunden schreiben.
      Beim Versuch die Zeitdifferenz zwischen Dienstende laut Plan und tatsächlichem Ende zu ermitteln aus den beiden Feldern „Jetzt“ und „Dienstende“ führt der folgende Versuch zu einer Zeitdauer, die eine Stunde zuviel ergibt (wäre an und für sich nicht schlecht, aber der Dienstgeber rechnet sicher genau :-)).

      convert the text of fld "Dienstende" to seconds
       put it into tEnde
       convert the text of fld "Jetzt" to seconds
       put it into tJetzt
       convert (tJetzt - tEnde) to time
       put it into fld "Ausgabe"

      Wo muss da etwas korrigiert werden, damit die Berechnung stimmt?
      liebe Grüße
      Georg

    • #3200
      Torsten
      Teilnehmer

      Hi Georg,

      welche Werte stehen in den Feldern drin? So kann ich gerade nicht nachvollziehen, wie das berechnet wird.

      Ausserdem scheint der Ausgabewert in Sekunden zu bestehen. Was du also eigentlich noch machen musst, ist die Sekunden in fld „Ausgabe“ in Stunden und Minuten umzurechnen, oder?

    • #3202
      Torsten
      Teilnehmer

      Vorschlag:

      
      put time into tSeconds
      put trunc(tSeconds/3600) into tHours -- Anzahl der Stunden
      put trunc(tSeconds/60) into tMinutes
      put trunc(tMinutes - (tHours * 60)) into tMinutes
      put tSeconds- ((tHours*3600) + (tMinutes * 60)) into tSeconds
      put tHours & ":" & tMinutes & ":" & tSeconds into field "Ausgabe"
      

      Die Sekundenanzahl von 3664 ergibt dann in Ausgabe: 1:1:4 = 1 Stunde, 1 Minute und 4 Sekunden.

    • #3204
      gfz
      Teilnehmer

      Hallo Torsten!
      Danke, dass Du Dir für mein Problem Zeit nimmst.
      Hier die Inhalte der Felder:
      „Jetzt“ 10:38 (Dieser Wert kommt mit: „put the system time into fld …“ zustande.)
      „Dienstende“ 07:30 (Diesen Wert schreibe ich selbst rein.)
      Die Umrechnung – dachte ich – würde „convert“ für mich erledigen. Zumindest hätte ich dieses „Versprechen“ aus der Dokumentation so interpretiert :-).
      Grüße aus Wien
      Georg

    • #3206
      gfz
      Teilnehmer

      Hi Torsten!
      Oh, du hast noch einen Vorschlag nachgereicht – Danke, den habe ich während meiner Antwort nicht bemerkt.
      Ich habe dann diese Variante als funktionierende Alternative gewählt:

         if fld "Dienstende" is not empty then
            convert the text of fld "Dienstende" to dateitems
            put it into tEnde
            put (item 4 of tJetzt)*60 + (item 5 of tJetzt) into tDauer
            //answer tDauer
            subtract ((item 4 of tEnde)*60+(item 5 of tEnde)) from tDauer
           // answer tDauer
            put format("%02d", tDauer div 60) & ":" & format("%02d",tDauer mod 60) into fld "Ausgabe"
         end if

      Aber nach genauerem Durchsehen der Doku zu convert, wollte ich wissen, ob es nicht auch einfacher geht über „convert … to seconds“. Scheinbar doch nicht auf Anhieb – oder ich habe da was falsch verstanden – was wohl eher der Fall sein dürfte ;-).
      LG
      Georg

    • #3211
      gfz
      Teilnehmer

      Eine Funktion zur Berechnung solcher Probleme (Zeitdauer) gibt es in LiveCode wohl nicht, oder?
      Bei der Suche nach „Duration“ fand ich in der Doku nur die Player-Eigenschaft „the duration“.
      LG,
      Georg

    • #3216
      Torsten
      Teilnehmer

      Hi Georg,

      aha! Leider bedeutet convert nicht genau das, was Du Dir erhoffst .-)

      Man muss sich überlegen, wie man die Zeitangaben miteinander verrechnet. In Deinem Fall ist es wohl so, dass Du jeweils STUNDE:MINUTE in beiden Feldern stehen hast und die Differenz zwischen beiden in STUNDE:MINUTE haben möchtest.

      Wenn das so ist, dass schlage ich folgendes vor (unter der Annahme, dass Du nicht über Mitternacht hinaus arbeitest 😉 :

      on mouseUp 
      put field "Dienstende" into tDienstende
      put field "Jetzt" into tJetzt
      
      set itemdelimiter to ":"
      
      -- die Stunden * 60 = Minuten, die sich aus den Stunden ergeben
      put (item 1 of tDienstende) * 60 into tEndeMinuten 
      
      -- plus die Minuten, die nach dem Doppelpunkt angegeben sind
      put item 2 of tDienstende + tEndeMinuten into tEndeMinuten 
      
      -- dasselbe für die Jetzt-Zeit
      put (item 1 of tJetzt) * 60 into tJetztMinuten
      put item 2 of tJetzt + tJetztMinuten into tJetztMinuten
      
      -- Jetzt-Minuten minus Ende-Minuten = die Minuten, die zu mehr gearbeitet hast
      put tJetztMinuten - tEndeMinuten into tUeberminuten 
      
      -- jetzt muss in Stunden und Minuten zurückgerechnet werden
      put trunc(tUeberminuten/60) into tUeberStunden
      put tUeberminuten - (tUeberstunden * 60) into tUeberminuten
      
      answer "Ich habe heute" && tUeberstunden && "Stunden und" && tUeberminuten && "Minuten mehr gearbeitet!"
      end mouseUp
Ansicht von 6 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.