0

Dezimalzahl in Zeit formatieren

Hallo

ich habe eine (Zeit)Berechnung, welche mir eine Dezimalzahl mit zwei Nachkommastellen ausgibt. Nun möchte ich diese Zahl als Zeit Stunden:Minuten anzeigen.

Habe erfolglos mit format und time experimentiert. Kann mir jemand eine Lösung anbieten?

Herzlichen Dank, beste Grüsse

Roger Schwab

11 Antworten

null
    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi Roger, nicht schick aber wirksam. "FELD" noch korrekt benennen . Geht aber nur, wenn der Wert nach dem Komma auch die Minuten angibt und nicht 1,5 eine Stunde und 30 Minuten bedeutet. Dann müßte man noch ein bisschen rechnen.

    *

    let hourItem := number(item(split(text(FELD), ","), 0));
    let minuteItem := number(item(split(text(FELD), ","), 1));
    time(hourItem, minuteItem)

    *

    Mirko

    • Roger_Schwab
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ich kriege es so nicht hin: dies ist meine Funktion

    let myName := Name;
    let myGeb := 'Geb._Datum';
    let myMon := yearmonth(date(year(today()), month(today()) - 1, 1));
    let myCnt := cnt(select Testung where Teilnehmer.Name = myName and Teilnehmer.'Geb._Datum' = myGeb and Freizeit = 1 and yearmonth('Test Datum') = myMon);
    let myWay := myCnt * 'Arbeitsweg Min' / 3600000;
    myCnt + myWay

    Der Hintergrund ist, dass die freiwilligen Mitarbeiter eine Zeitgutschrift pro Covid-Test erhalten (1 Stunde Zeit plus den Arbeitsweg ('Arbeitweg Min' (ist ein Zeitdauer-Feld), wenn sie in der Freizeit den Test machen lassen). Die Anzahl der Tests des Vormonats ist eine Zahl (myCnt).

    Addiert gibt das z.B. 1.4 Std (1 Stunde, 24 Min). Das möchte ich gerne automatisch als Zeit darstellen (01:24), damit es nicht umgerechnet werden muss.

    Danke und Gruss, Roger

    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Roger, ich würde die beiden letzten Zeilen durch folgende ersetzen:

     

    time(myCnt, 0, 0) + myCnt * 'Arbeitsweg Min'

    • Roger_Schwab
    • vor 3 Jahren
    • Gemeldet - anzeigen

    hello Copytexter

    danke für den Tipp; das Ergebnis daraus ist 5040000 (vorher 1.4)

    Gruess, Roger

    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Roger, bei Dezimalzahlen noch die Umrechnung wie unten. Bitte Dein Funktionsfeld noch beim Zahlenformat auf 2 Nachkommastellen einstellen, wenn nicht schon geschehen.

    *

    let myName := Name;

    let myGeb := 'Geb._Datum';

    let myMon := yearmonth(date(year(today()), month(today()) - 1, 1));

    let myCnt := cnt(select Testung where Teilnehmer.Name = myName and Teilnehmer.'Geb._Datum' = myGeb and Freizeit = 1 and yearmonth('Test Datum') = myMon);

    let myWay := myCnt * 'Arbeitsweg Min' / 3600000;

    let timeTotal := myCnt + myWay

    let hourItem := number(item(split(text(timeTotal), ","), 0));

    let minuteItem := number(item(split(text(timeTotal), ","), 1)) * 3 / 5;

    time(hourItem, minuteItem)

    • Roger_Schwab
    • vor 3 Jahren
    • Gemeldet - anzeigen

    erneut danke, scheint jedoch verzwickt:

    die Nachkommastellen sind bereits auf 2 eingestellt, das Ergebnis nun 0.00 🤔

    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Seltsam, bei mit funktioniert die o. g. Codezeile. Getestet mit Web- und Mac-App. Als Ergebnis der cnt()-Funktion muss die Variable "myCnt" ja eigentlich immer eine Ganzzahl enthalten. Und wenn 'Arbeitsweg Min' ein Feld vom Typ Zeitdauer ist, dann sollte das Ergebnis der Multiplikation vom selben Format sein, also bspw. "0:24". Dazu wird ein Zeitwert in ganzen Stunden (MyCnt) addiert, was im vorliegenden Fall "1:24" ergibt. Mir ist schleierhaft, warum das bei euch anders sein sollte.

    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Bei mir gehen beide Wege. Ich hab schon überlegt, dass 'Arbeitsweg Min' kein Zeitdauerfeld ist. Deshalb dachte ich mit einer einer Stringumwandlung dem aus dem Wege zu gehen. Wenn es also eine einfache Dezimalzahl ist, dann ist die Zahl hinter dem Komma keine Minutenangabe, muss also erst noch umgerechnet werden durch *3/5 oder ungekürzt *60/100. Einfacher wäre natürlich Copytexters Variante, wenn die Feldformate übereinstimmen. Okay. Einen hab ich noch.

    *

    let myName := Name;

    let myGeb := 'Geb._Datum';

    let myMon := yearmonth(date(year(today()), month(today()) - 1, 1));

    let myCnt := cnt(select Testung where Teilnehmer.Name = myName and Teilnehmer.'Geb._Datum' = myGeb and Freizeit = 1 and yearmonth('Test Datum') = myMon);

    let myWay := myCnt * 'Arbeitsweg Min' / 3600000;

    let timeTotal := myCnt + myWay;

    let hourItem := floor(timeTotal);

    let minuteItem := round((timeTotal - floor(timeTotal)) * 100) * 3 / 5;

    time(hourItem, minuteItem)

    *

    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ja, ich vermute auch, dass das Feld 'Arbeitsweg Min' vielleicht doch keines vom Typ Zeitdauer ist. Davon mal abgesehen: Grundsätzlich bestehen ja folgende Möglichkeiten zur Umrechnung:

     

    Umrechnung Zeitangabe (4:15) in Dezimalwert (4,25):

    number(ZEITANGABE) / 3600000

     

    Umrechnung Dezimalwert (8,5) in Zeitangabe (8:30):

    time(DEZIMALWERT * 3600000)

     

    Daraus sollte sich eigentlich immer eine passende Formel ableiten lassen, indem man die Werte in dasselbe Format bringt. So müsste es also bspw. auch funktionieren:

    time(myCnt * 3600000) + time(myCnt * number('Arbeitsweg Min'))

    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    ...wäre es dann in Rogers Beispiel nicht

    time((myCnt + myWay)*3600000) ? Oder liege ich da falsch?

    Danke für die Erklärungen, so schön einfach hatte ich es nicht auf dem Schirm. Da ist meine Variante doch sehr umständlich. Gruß Mirko

    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Möglich, allerdings würde das ja eine vorhergehende Berechnung der Variable myWay voraussetzen. Man braucht m. E. aber nur die (Ganzzahl-) Variable myCnt und das (Zeitdauer-) Datenfeld 'Arbeitsweg Min', um das Ergebnis mit einer einzigen Zeile Code korrekt zu berechnen.