Startseite › Foren › Deutsches LiveCode-Forum › Berechnung der Zeitdifferenz zweier Uhrzeiten
- Dieses Thema hat 6 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 7 Jahren von Torsten.
-
AutorBeiträge
-
-
Dezember 11, 2017 um 09:59 Uhr #3198
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 -
Dezember 11, 2017 um 10:52 Uhr #3200
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?
-
Dezember 11, 2017 um 11:18 Uhr #3202
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.
-
Dezember 11, 2017 um 11:23 Uhr #3204
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 -
Dezember 11, 2017 um 11:33 Uhr #3206
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 -
Dezember 11, 2017 um 12:28 Uhr #3211
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 -
Dezember 11, 2017 um 13:24 Uhr #3216
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
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.