collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 41
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13929
  • stats Beiträge insgesamt: 66086
  • stats Themen insgesamt: 8913
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Minuten in Feldern Subtrahieren  (Gelesen 434 mal)

Offline John1994

  • Newbie
  • Beiträge: 11
Minuten in Feldern Subtrahieren
« am: Februar 12, 2018, 00:28:01 »
Guten Abend ihr Lieben,

eventuell könnt ihr mir ja einen kleinen Denkanstoß geben, da meine
Hirnwindungen sich konsequent sträuben mir zu helfen :P
Bei Google habe ich ebenso wenig zu meinem Problem gefunden, was aber auch an meiner Recherchefähigkeit liegen könnte.

Ich hoffe ihr lacht mich für mein Problem nicht aus, und könnt es mir so erklären, dass slebst ich das mit meinen 23 Jahren verstehe und nie wieder darüber stolpern muss :P

Ich habe eine Tabelle, welche eine Startzeit und eine Endzeit enthält.
Gern würde ich durch subtrahieren der Start-Zeit von der End-Zeit die jeweiligen Arbeitsstunden errechnen. Das funktioniert an sich auch gut, ich habe jedoch das Problem, dass wenn jemand in den neuen Tag hinein gearbeitet hat, meine Abfrage dann natürlich nicht mehr funktioniert.
Wie kann ich diese Problematik beheben?

Des Weiteren muss ich, wenn die Person in 23 Uhr "rein arbeitet" und bis 5 Uhr muss ich 5 Minuten zusätzlich addieren, da hier dann Nachttarif gilt. 

Vielen lieben Dank für eure Hilfe.
Ich habe mal ein paar Bilder mit meiner Datenbank angehangen.
Meckert wo ihr meckern könnt, bedenkt aber bitte dass ich Anfänger der Thematik bin :)

 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1205
Re: Minuten in Feldern Subtrahieren
« Antwort #1 am: Februar 12, 2018, 06:51:11 »
Wären Anfangs- und Endzeitpunkt komplett mit Datumsanteil erfasst, wäre das Ergebnis die Berechnung auch immer richtig! Eine einsame Uhrzeit sollte man i.d.R. nur zur Angabe einer absoluten Zeitdauer zwischen 0 und 24 Std. verwenden - wie das in der Berechnung ja auch dargestellt ist, - nicht jedoch als Angabe eines Zeitpunkts. Ein Zeitpunkt wird durch Datums- und Uhrzeitanteil bestimmt.

Willst Du trotzdem an den fragwürdigen Zeitangaben festhalten, s kannst Du diese Berechnung (in einer Zeile) verwenden.Arbeitszeit: DateAdd("n"; -([Start_Uhrzeit] >= #23:00:00# Oder
                            [Start_Uhrzeit] <= #05:00:00# Oder
                            [Endzeit]       >= #23:00:00# Oder
                            [Endzeit]       <= #05:00:00#) * 5;
                     CDate(Format$([Start_Uhrzeit] - 1 - [Endzeit]; "Long Time")))
Grüße von der (⌒▽⌒)
 

Offline John1994

  • Newbie
  • Beiträge: 11
Re: Minuten in Feldern Subtrahieren
« Antwort #2 am: Februar 14, 2018, 20:55:37 »
Vielen lieben Dank für deine Antwort.
Gern werde ich deine Ratschläge umsetzen.

Könntest du mir eventuell noch erklären, was der von dir gepostete
Code im Einzelnen tut?
 

Offline John1994

  • Newbie
  • Beiträge: 11
Re: Minuten in Feldern Subtrahieren
« Antwort #3 am: Februar 14, 2018, 21:21:21 »
Arbeitszeit: DateAdd("n"; -([Start_Uhrzeit] >= #23:00:00# Oder
                            [Start_Uhrzeit] <= #05:00:00# Oder
                            [Endzeit]       >= #23:00:00# Oder
                            [Endzeit]       <= #05:00:00#) * 5;

Hier wird die Uhrzeit mit den nötigen Kriterien versehen. Also wenn dann.....
Wenn die Kriterien am Ende erfüllt und die jeweiligen Datensätze gewählt wurden, werden diese mit 5 addiert.

Meine Fragen bis hier hin.
                                        - Warum ist der Rechenoperator hier ein * und kein +?


CDate(Format$([Start_Uhrzeit] - 1 - [Endzeit]; "Long Time")))

Hier werden alle Datensätze miteinander verrechnet. Auch die, welche die oberen Kriterien nicht erfüllen.

Hier hätte ich die Frage, wofür die -1- gut ist?


Habe ich den Code so richtig interpretiert?
Der Sinn ist, dass ich natürlich was lernen möchte :) Deshalb die vielen Fragen.
Falls ich nerven sollte, entschuldige ich mich hier.

Ich würde nämlich gern allen zusätzlich noch 3 Minuten draufrechnen.
Würde bedeuten, dass die Nacharbeit nicht nur 5 sondern zusätzlich 3 Minuten zugerechnet bekommt und die normale Arbeitszeit 3 Minuten. Ich habe mich jetzt mal ein bisschen ausprobiert, bin aber leider nicht auf eine Lösung gekommen.
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1205
Re: Minuten in Feldern Subtrahieren
« Antwort #4 am: Februar 14, 2018, 23:31:39 »
Der Wert für Wahr entspricht -1, der für Falsch entspricht 0. Ist mindestens einer der vier mit dem Oder-Operator verknüpften Ausdrücke Wahr, so ist das Gesamtergebnis Wahr, d.h. der Ausdruck wird zu -1 * Wahr * 5, was aufgelöst -1 * -1 * 5 ergibt oder zu -1 * Falsch * 5, was -1 * 0 * 5 entspricht. Das Ausrechnen überlasse ich Dir.

Access und VBA verwenden für Datum/Uhrzeitwerte den OLE-Date Datentype, dessen Epoche mit dem 30.12.1899, was dem Dezimalwert 0 entspricht, beginnt. Dem Wert von 1 entspricht der 31.12.1899, dem von 2 der 1.1.1900, usw.; in die andere Richtung geschaut, ergibt -1 den 29.12.1899, -2 den 28.12.1899 usw.. Werte, die zwischen -1 und 1 liegen, stellen aber auch Uhrzeiten (im Sinne von Zeitspannen) dar, wobei der Quotient 1/24 eine Stunde repräsentiert. D. h. 0,5 entspricht 12:00 Uhr, 0,25 entspricht 6:00 Uhr und 0.75 entspricht 18:00 Uhr. Aber auch mit negativem Vorzeichen ergeben diese Werte die gleichen Uhrzeitwerte, was verwirrend ist. Daraus ergibt sich bei Datum/Uhrzeitwerten im negativen Bereich, dass z. Bsp. der Zeitpunkt 1.12.1899 6:00 (Wert -29,25) größer ist als der Zeitpunkt 1.12.1899 18:00 (Wert -29,75). Nähert man sich der Mitternacht, findet dann ein Sprung statt: 1.12.1899 23:59:59 entspricht dem Dezimalwert -29,9999884259259 und eine Sekunde hinzu addiert führt dann zu -28!

Dieses Wissen kann man dann in dem Ausdruck ausnutzen, indem man einfach den Startwert um einen Tageswert vermindert. Nehmen wir 21:00 Uhr (7/8), subtrahieren 1, so erwird der Wert zu -1/8. Nehmen wir als Ende 1:30 Uhr (1/16) an, so sagt Adam Riese als Ergebnis -3/8 = 4,5 Stunden voraus.

Die Format-Funktion wird hier nur benötigt, um ggf. Tagesanteile zu eliminieren (ist bei Dir nicht der Fall) und um ggf. auf ganze Minuten zu runden. Weil Format als Ergebnis den Datentyp Text verwendet, wandelt CDate dieses Ergebnis in einen echten Datum/Uhrzeitwert um.

Lägen Start- und Endzeitpunkt komplett mit Datumsanteil vor, könnte man sich die ganze Überlegung schenken und einfach den Startzeitpunkt vom Endzeitpunkt subtrahieren (wir befinden uns ja im 21. Jahrhundert) und hätte immer (dann auch durch weniger Rechenoperationen) das richtige Ergebnis vorliegen.

Generell drei Minuten zur Ergebnisdauer zu addieren, könnte ebenso mit der DateAdd-Funktion durchgeführt werden und sollte nunmehr keine größere Schwierigkeit darstellen.
Grüße von der (⌒▽⌒)