Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Rechnen mit DateDiff über 00:00 hinaus

Begonnen von Xoar, November 15, 2016, 12:49:23

⏪ vorheriges - nächstes ⏩

crystal

Hallo Josef,
im Prinzip ja.
Aber es ist schon etwas "merkwürdig", wenn ich auf ein Feld "Uhrzeit bis" klicke und dann als Vorgabe "15.11.2016 21:10:00" erhalte.
Und so müsste ich das Eingabefeld ja formatieren.

Angenehmer und intuitiver wäre es doch, in einem "Uhrzeit bis"-Feld als Vorgabe schlicht "21:10" zu erhalten und ggf. ein weiteres Feld, z.B. auch ein Optionsfeld, mit "nächster Tag" zu bestätigen.

Wenn du das Datum per VBA vorgeben möchtest, gäbe es durchaus einige Probleme, z.B. Datum liegt in der Vergangenheit, Datum liegt mehr als x Tage nach dem Start-Termin usw.

Da wäre meine Variante von der Bedienbarkeit her doch erheblich eleganter und verständlicher, besonders wenn ich daran denke, dass ein solches Planungs-Formular z.B. für die folgenden 4 Wochen gelten soll und daher einfach nur die Tage Mo bis So darstellt - egal welchen Datums. Und genau das ist der Knackpunkt: wenn ich einen Schichtplan erstelle, ist das konkrete Datum zweitrangig, ich orientiere mich eher an Wochentagen.

Nur so Gedanken zur Ergonomie der Oberfläche...

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Xoar

Ui da kam ja schon gut was zusammen.

Also die Felder sind Datumsfelder, also 30.12.1899 + hh:mm

Es gibt maximal einen Datumswechsel, der von 07:30 bis 07:30 und zwar genau ein Tag. Nie mehr.

Also am Ende reichen mir Zeitsummen.

Ich teste dann morgen mal etwas rum.

Im Eingabeformular habe ich tatsächlich einfachhalt halber hh:mm formatiert

ebs17

Zitatund zwar genau ein Tag. Nie mehr.
Wenn ein Maximaldienst von 24 Stunden, dafür kein 0-Stunden-Dienst möglich ist, könntest Du den Vorschlag aus der allerersten Antwort aufgreifen, indem das "<" durch ein "<=" ersetzt wird.
Mit freundlichem Glück Auf!

Eberhard

Josef P.

Hallo!

ZitatAber es ist schon etwas "merkwürdig", wenn ich auf ein Feld "Uhrzeit bis" klicke und dann als Vorgabe "15.11.2016 21:10:00" erhalte.
Und so müsste ich das Eingabefeld ja formatieren.
Warum musst du das so formatieren? Ich muss das nicht. ;)
Beispiel: http://access.joposol.com/download/Uhrzeiteingabe.zip

mfg
Josef

MzKlMu

#19
Hallo,
@Cristal
nein, meine Formel ist richtig und liefert von 22:00 - 7:00 die richtigen 9 Stunden.
Du hast den Datentyp Datum/Uhrzeit noch nicht richtig verstanden.
Die Uhrzeit ist intern eine Zahl (<1) des Typs Double.
12:00 = 0,5
Wenn Du also mit meiner Formel rechnen willst, muss die Zeit erst mal in eine Kommazahl gewandelt werden. Du darfst nicht mit den absoluten Stundenwerten rechnen das wird falsch.
22:00 = 0,916666666
07:00 = 0,291666666
Access rechnet intern mit diesen Kommazahlen.
Jetzt lösen wir die Formel von innen nach außen auf.
Ende       -     Start
0,291666666 - 0,916666666 = - 0,624999999

Da Ende kleiner ist als Start erhalten wir den Wahrheitswert - 1 der mit - suptrahiert wird und so zu plus wird.
Somit haben wir
- 0,624999999 + 1 = 0,375
Und dieser Gesamtausdruck muss in der Gesamtformel geklammert werden und mit 24 multipliziert.
0,375 * 24 = 9
Somit haben wir die richtigen 9 Stunden.

Noch was zum Datum. Ein Datum mit Zeit ist wie gesagt eine Zahl des Typs Double. Der Teil nach dem Komma ist der dezimale Anteil eines Tages. 12:00 = 0,5, siehe oben. Die Zeit haben wir oben behandelt.
Das Datum ist die Zahl vor dem Komma beginnend mit der Zahl 1 das ist der 31.12.1899. Die Zahl vor dem Komma wird daher immer als Datum interpretiert.
Wenn man jetzt Stunden addieren will z.B. 9+8+7+6 so wird intern so gerechnet:
0,375+0,333+0,291+0,25=1,25 * 24 = 30 Stunden.
Da hier vor dem Komma eine 1 steht wird das als Datum interpretiert und als 31.12.1899 06:00:00 dargestellt. Wenn man jetzt eine solche Zeitsumme (1,25) mit einem Zeitformat belegt wird 06:00 angezeigt was als Uhrzeit richtig ist aber als Zeitensumme falsch.
Die 30 Stunden müssen also mit einer eigenen Funktion (da ist einiges zu finden) als 30:00 dargestellt werden.

Wenn man den Datentyp Datum/Zeit mal verstanden hat, kann man damit völlig problemlos rechnen.

Gruß Klaus

crystal

Hallo Klaus,
ich habe meine Formel in einem einfachen Formular getestet (s. Bild). Die ersten beiden Felder sind Eingabefelder, die anderen werden beechnet. Das Format der Felder habe ich angegeben.

Mit diesem Formular klappt die Berechnung und bei der numerischen Variante kommt als Ergebnis auch 24 heraus, wenn beide Zeiten gleich sind.

Liegt es daran, dass meine Felder ungebunden sind und somit als Datentyp nicht Datum/Zeit haben, sondern vermutlich Text?

lg
crystal

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MzKlMu

Hallo,
ich habe Deine Formel nicht getestet, ich wollte nur erklären, warum meine Formel richtig rechnet, da Du deren Richtigkeit angezweifelt hast.
Und dabei bin ich noch näher auf den Datentyp "Datum/Uhrzeit" eingegangen.
Gruß Klaus

crystal

Hallo Klaus,
ich wollte auch nicht rechthaberisch sein, sondern nur zeigen, dass ich eine andere Testumgebung gebaut hatte.

Deine Erklärungen des Datum/Zeit-Feldtyps finde ich übrigens sehr gut!

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MzKlMu

#23
Hallo,
OT
ZitatDeine Erklärungen des Datum/Zeit-Feldtyps finde ich übrigens sehr gut!
siehst Du, geht doch. Wozu willst Du dann eine extra Bewertungsmöglichkeit.
Das ist doch jetzt bewertet genug.  ;D
Gruß Klaus

crystal

<OT>
Hallo Klaus,
nach reiflicher Überlegung bin ich zu dem Schluss gekommen, dass du absolut Recht hast. Eine Bewertung, auch wenn sie einer strikten Vorgabe folgen würde, ist eine zufällige Sache, selbst dann, wenn man jeden Leser "zwingen" würde, eine Bewertung abzugeben. Aber das wäre natürlich Unfug.

Du hast mich mit deinen Argumenten überzeugt und umgestimmt.

lg
crystal
</OT>
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Xoar

Ich danke euch allen, habe selbst viel dazu gelernt!

Xoar

Hallo,
muss das Thema noch einmal kurz ins Gedächtnis rufen.

Bin jetzt zu dem Entschluss gekommen mit dem kompletten Datum zu rechnen, sprich Datum und Zeitanteil.
Kann ich übrigens nach langen hin und her, nur jedem empfehlen.
Die Folgeberechnung für alles mögliche reduzieren sich immens im Umfang dadurch ;)

So jetzt zum eigentlichen Problem.
In dem Beispiel von Josef gibt es ein Eingabefeld im hh:nn Format und dann ein Feld welches in tt.mm.jjjj hh:nn Format das Datum in der Tabelle speichert.

Habe das für mich selbst umgebaut, klappt auch super.
Ich habe aber das Problem, dass ich vordefinierte Zeiten habe, sprich diese schon in der Tabelle eingetragen sind und beim öffnen des Formulars (Endlosformular) sollen nun in dem ungebundenen Feld was in hh:nn formatiert ist die voreingetragenen Zeiten dargestellt werden, aber auch noch bearbeitbar sein.

wenn ich das ungebundene mit Steuerelementinhalt =[von] schreibe, zeigt er mir zwar hh:nn an, aber sobald ich was ändern will, erschein das Datum UND die Zeit, dies sollte ja nicht passieren. mit =Timevalue([von]) kann ich das Feld nicht mehr bearbeiten.

hab das jetzt so gelöst, dass ich in der Tabelle die hh:nn Zeiten habe UND die tt.mm.jjjj hh:nn Zeiten.
Sobald ich das Feld im hh:nn Format ändere, ändert über VBA auch das andere Feld mit dem kompletten Datumsanteil, womit ich dann rechne.

Ist zwar eine pragmatische Lösung, aber garantiert nicht die Beste.
Man schon wieder viel Text und umständlich erklärt *sorry*

Kurzversion:
Ungebundenes Feld im Endlosformular soll beim öffnen, nur den Zeitanteil von [von] anzeigen und bearbeitbar sein -> nach Eingabe soll [von] den neuen Zeitanteil vom ungebundenen Feld übernehmen.

Grüße

MzKlMu

Hallo,
wenn schon Datum und Zeit würde ich getrennte Felder verwenden, also 4 Felder gesamt. DatumVon, ZeitVon, DatumBis, ZeitBis. Alle Felder sind dann gebunden und können natürlich auch bearbeitet werden. Auch mit dem Format.
Datum und Zeit kann man ganz einfach addieren und kann damit rechnen.
Z.B. in einer Abfrage:
Dauer: (DatumBis + Zeitbis) - (DatumVon + ZeitVon)
Ergibt eine dezimale Dauer in Tagen, also z.B. 2,33 Tage.
Den Gesamtausdruck mit 24 multipliziert ergibt Dauer in dezimalen Stunden.
Oder mit 1440 multipliziert ergibt dezimale Minuten.
Gruß Klaus