Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

THEMA: Mit SEBLOD® Zeitdifferenz berechnen

Mit SEBLOD® Zeitdifferenz berechnen 22 Aug 2016 16:44 #3742

  • ralle
  • ralles Avatar
  • OFFLINE
  • Beiträge: 4
In einem Beitrag möchte ich gerne mit SEBLOD® die Zeitdifferenz zwischen Anfangs- und Endzeit ausgeben (berechnet) leider geht das mit den Feldwertberechnungsoptionen nicht. Die Uhrzeiten werden über das Calendereingabefeld in der Datenbank gespeichert. Nehme ich dann ein drittes Feld zur Ausgabe der Differnz und gebe die Subtraktion a-b als Rechenformel vor bekomme ich nur eine Fehlermeldung und nicht die Differenz in Stunden.

Gibt es dafür schon Ideen wie dies realisiert werden kann?

Mfg

>>und an Axel Tüting vielen Dank für das tolle SEBLOD® Handbuch<<
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Mit SEBLOD®® Zeitdifferenz berechnen 23 Aug 2016 06:51 #3743

Servus Ralle,

ein Datum kann nicht substrahiert werden, das geht nur mit Timestamps, die du dann wieder in eine Zeitangabe umrechnen kannst.
Dafür gibt es php- als auch Javascript-Funktionen als Möglichkeit. Dass SEBLOD® ein solches Plugin anbietet, wüsste ich aktuell nicht.

Damit wir dir effektiv helfen können, poste bitte deine Herangehensweise detailliert als auch Fehlermeldungen (oder Fehlresultate).

Beste Grüße, Pierre.
J!Praxis - Besser.Online - seit 2009
Joomla! Business Support, Programmierung, Websicherheit.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Folgende Benutzer bedankten sich: ralle

Mit SEBLOD®®® Zeitdifferenz berechnen 24 Aug 2016 06:37 #3745

  • ralle
  • ralles Avatar
  • OFFLINE
  • Beiträge: 4
Vielen Dank Pierre,
ich möchte ein Formblatt erstellen in der ich meine Arbeitszeit als Kraftfahrer über das Handy erfasse. Dieses Formblatt soll dann automatisch an meine Firma gesendet werden. Damit spare ich mir die Schreibarbeit und den Versand von Zeitnachweisen. In diesem Formular soll efasst werden: Arbeitsbeginn, Arbeitsende und Pausenzeit. Diese sollen voneinander in dem Feld "Arbeitszeit gesamt" die reine Arbeitszeit automatisch ausweisen.

Vielen Dank für Dein / Euer Interesse an dieser Problemstellung

Mfg
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Mit SEBLOD®®®® Zeitdifferenz berechnen 25 Aug 2016 06:49 #3747

Hallo nochmal,

verstehe - wie gesagt lassen sich Zeitangaben, idR in diesem Format in der Datenbank gespeichert: 2016-08-26 12:12:12, nicht als Formelteil hernehmen / berechnen. Du benötigst den Timestamp, das ist ein Unix Format und eine Zahl die ab 1970 hochgezählt wird.
Die zugehörige PHP-Funktion findest du hier: php.net/manual/de/function.time.php
Für Javascript gibt es ein Äquivalent.
Deine Datums-Feldwerte für Startzeit, Endzeit und Pausenzeit müssen umgerechnet werden, bevor du damit eine Differenz berechnen kannst.
Dafür gibt es nun wieder mehrere Herangehensweisen, die von mir präferenzierte für SEBLOD® wäre die des (Seblod) Template Overrides (da brauchst du kein Codepack oder anderes Plugin), in welchem du mit Javascript / jQuery ein Event on.change() triggern kannst.
Vorher benötigst du Pseudo-Felder für die Timestamps, 3 Stück insgesamt.
Also Feld pseudo_startzeit, pseudo_endzeit, pseudo_pause, welche jeweils mit der time() Funktion bei Änderung des Feldes berechnet werden.
Die Formel rechnet dann pseudo_endzeit - pseudo_startzeit - pseudo_pause und am Ende rechnest du das wieder um in das lesbare Format date().

Eine Alternative wäre es, von vornherein die Unix-Timestamps zu speichern anstatt des Datumformates - dann musst du nur einmal umrechnen - da müsste ich jetzt aber selber auch nachschauen ob SEBLOD® das anbietet bzw. wie man das in der Datenbank / dem Feld abspeichern kann...
Aber vielleicht hilft dir das ja schon weiter.

Liebe Grüße,
Pierre.
J!Praxis - Besser.Online - seit 2009
Joomla! Business Support, Programmierung, Websicherheit.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Folgende Benutzer bedankten sich: nscnsc, ralle

Mit SEBLOD®®®®® Zeitdifferenz berechnen 28 Aug 2016 13:37 #3748

  • ralle
  • ralles Avatar
  • OFFLINE
  • Beiträge: 4
Vielen Dank Pierre,

grundsätzlich ist dieser Weg einleuchtend. Mir fehlt leider noch ein bisschen Tiefe in der Sache diesen Weg zu gehen. Da möglicher Weise diese Lösung für andere Forenbesucher ebenso interessant ist, könntest du deinen Vorschlag etwas ausführlicher erklären? Ähnlich wie es wykiki beschreibt? Danke

mfg Ralf
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Mit SEBLOD®®®®®® Zeitdifferenz berechnen 28 Aug 2016 18:02 #3749

Hallo Ralf,

gern geschehen.
Nun, welchen Weg genau möchtest du denn genauer kennen lernen? Ich würde ja den von mir präferenzierten wählen, das ist aber auch immer eine Frage der (Entwicklungs-)Umgebung und natürlich auch des Kenntnisstandes. Wenn man bsp.weise bisher nicht mit SEBLOD® Overrides gearbeitet hat, dann wären das 2 Lehraufgaben.
Ich kann theoretisch und bei genügend Muße, respektive Zeit^^, auch ein Video dazu drehen, wenn es das ist was du meintest mit deiner Aussage "ähnlich wie es Wykiki beschreibt".

Liebe Grüße, Pierre.

@Axel - schau mal die hiesige Überschrift an, deine *_replace('Seblod') Regel macht Faxen ;)
J!Praxis - Besser.Online - seit 2009
Joomla! Business Support, Programmierung, Websicherheit.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Folgende Benutzer bedankten sich: ralle

Mit SEBLOD®®®®®®® Zeitdifferenz berechnen 28 Aug 2016 20:08 #3750

  • ralle
  • ralles Avatar
  • OFFLINE
  • Beiträge: 4
Da ich bisher noch keine SEBLOD® Overrides benötigt habe, ist es für mich natürlich interessant wie du diese Problemstellung realisieren würdest. Natürlich ist es sehr zeitintensiv wie ausfühlich wykiki seine Lösungen präsentiert. Mir alleine wäre es weiter eine Hilfe die Schnittstellen deiner Lösung genauer zu bezeichnen. Pfad zum "template override", "dein bevorzugtes php-skript", die Stelle an der du es einbindest und die Verknüpfung zu den SEBLOD® Feldern(Ein und Ausgabe und die verbundenen "hidden" Berechnungsfelder) die anzulegen sind. ;-)

Mfg Ralf
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Mit SEBLOD®® Zeitdifferenz berechnen 19 Sep 2016 15:42 #3764

  • Whykiki
  • Whykikis Avatar
  • OFFLINE
  • Beiträge: 74
  • Dank erhalten: 33
Er hat mich kontaktiert und weil ich heute mal ein paar Minuten Luft und Lust auf ne Knacknuss hatte, habe ich mir das mal angesehen. Es geht um die Arbeitszeitberechnung in Stunden - wir sind ja letztlich alle nur noch Mannarbeitsstunden oder so ähnlich.
Lange Rede, kurzer Sinn, wir brauchen also die Ausgabe z.B. 1,5 Stunden.

Die Berechnung der Zeitdifferenz erfolgt im aktuellen Fall dann über das Site-Form und mit dem Template Seb One.
Zudem benötigen wir ein Feld "Arbeitsbeginn" -> Calendar (Y-m-d H:i:s)
ein Feld "Arbeitsende" -> Calendar (Y-m-d H:i:s)
ein Feld "Pausenzeit in h" (einfaches Textfeld)
ein Feld "Arbeitszeit gesamt in h" (einfaches Textfeld)

In die Datei templates/seb_one/index.php fügen wir dann folgendes ein vor dem ersten <div>:
<script>
jQuery( document ).ready(function() {
 jQuery( "#seblod_form" ).change(function() {
  var start_time =  jQuery('#arbeitsbeginn').val();
  var end_time =  jQuery('#arbeitsende').val();
  var pause =  jQuery('#pausendauer').val();
  var start = new Date(start_time).getTime();
     var end   = new Date(end_time).getTime();

  var total = (parseInt(((end-start) / 1000 / 3600)*100, 10)) / 100;
  var arbeitszeit = total - pause;
  jQuery('#arbeitszeit_gesamt').val(arbeitszeit);
 });
});
</script>

Die Zeile jQuery( "#seblod_form" ).change(function() bewirkt, dass jede Änderung in einem der Formfelder des SEBLOD®-Formulars berechnet wird. Üblicherweise ist die id des Forms "seblod_form", prüft das aber ggf. nochmal mit Firebug.
Dann bilden wir die verschiedenen Zeitvariablen:

var start_time = jQuery('#arbeitsbeginn').val();

An diesem Beispiel lässt es sich simpel erklären: Wir bilden die Variable start_time indem wir uns den Wert aus dem Input-Feld mit der ID "arbeitsbeginn" holen.
Dazu muss man wissen: Die ID's der Inputfelder lauten immer so, wie der Feldalias, d.h. nennt man das Feld "Feld 1", lautet der Alias "feld_1" und genauso lautet auch die ID. Wenn ihr nicht sicher seid -> Firebug!!!

Somit haben wir nun die Werte aus den Feldern mit jQuery ausgelesen (siehe Code oben). Danach erfolgt dann das Ausrechnen.

var total = (parseInt(((end-start) / 1000 / 3600)*100, 10)) / 100;

Damit wird die Differenz der beiden Daten ausgerechnet und als Stunden ausgegeben. Die Pausenzeit geben wir ebenso in Stunden an. Eine halbe Stunde ist also 0.5 eine Viertelstunde 0.25. Das vereinfacht die Berechnung der Gesamtarbeitszeit aller Mitarbeiter bzw ist das ja auch der übliche Wert bei der Arbeitszeitberechnung soweit ich weiss :-)
Unsere Pausenzeit ist somit nur ein simples Textfeld in den wir den Wert von Hand eintragen.

Damit unsere Gesamtarbeitszeit abzgl. Pause nun auch in das Form übernommen wird, müssen wir nun den berechneten Wert in das Inputfeld übergeben. Das erfolgt so:

jQuery('#arbeitszeit_gesamt').val(arbeitszeit);

Das kann man nun auch beliebig erweitern. Manchmal ist jQuery im Template echt hilfreich um so einfache Rechenoperationen durchzuführen.
Vielleicht hilfts ja dem ein oder anderen.

Gruss Kiki
Letzte Änderung: 19 Sep 2016 15:48 von Whykiki.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Folgende Benutzer bedankten sich: nscnsc, ralle
nach oben