Zeiten Rechnen

  • Ich habe folgende Ausgangslage.
    In einer Datenbank habe ich Uhrzeiten, (z.B. 5:30Uhr und 15:00Uhr)


    Die Uhrzeiten möchte ich voneinander abzählen.


    Für eine Kostenberechnung (Arbeitseinsatz) habe ich von 06:00-22:00Uhr andere Tarife als 22:00-06:00Uhr.
    Ich habe nun versucht die Zeiten so aufzuteilen, dass ich zuerst die Zeiten vor 06:00 in eine Variable schreib, dann die Zeit tagsüber in eine Variable und die Zeit nach 22:00Uhr in eine weitere.
    Da muss ich allerdings zuerst schauen ist die Zeit kleiner als 06:00Uhr, resp. grösser als 22:00Uhr um damit rechnen zu können.


    Am Schluss möchte ich diese Zeit noch auf 15min genau runden.


    Ist das ganze so umständlich, oder gibt es einen einfacheren Weg?


    Gruss
    Philipp

  • Ja ich habe die Eingaben als Time in der DB.
    Ich währe schon mal froh, wenn ich 06:00 - "Time aus DB-Feld" ein vernünftiges Resultat erhalten würde.


    Irgendwie klappt das bei mir nicht.

  • Also ich habe es nun mal so versucht:


    PHP
    1. $nacht1 = "06:00" - $row_podidate['podizei_bis']=date("H:i", strtotime( $row_podidate["podizei_bis"]));
  • Bitte mal das hier anpassen und ausführen + Ergebniss posten..
    Super var_dump - Mehrere Datensätze in Variable speichern
    Bei mir sieht das dann so aus:


    Und raus kommt:

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von wolf ()

  • Ich sehe als erstes die Zeiten die im Feld podizei_von stehen. Danach kommt ein Fehler aus der Zeile 2 (bei mir ist es die Zeile 115).


    DATE #0 - 15:00
    DATE #1 - 10:00
    DATE #2 - 00:04
    DATE #3 - 00:00
    DATE #4 - 15:00
    DATE #5 - 12:00



    Fatal error: Call to a member function fetch() on a non-object in /.../.../htdocs/test.php on line 115

  • $row scheint leer zu sein.
    Aber wieso?


  • Hier kam dovh was bei dir raus?

    PHP: 38
    1. //Daten Weiterverarbeiten
    2. $dates = array();
    3. while ($row = mysql_fetch_assoc($pd_date['result'])) {
    4. $dates[] = date("H:i", strtotime( $row['podizei_bis'] ));
    5. }
    6. foreach ($dates as $key => $value) {
    7. echo "DATE #".$key.' - '.$value.'<br>';
    8. }


    Dann ist ROW warscheinlich auchnicht leer ^^ .. aber solange was raus kommt ists schonmal gut


    Wenn $row nicht leer dann hilft dir das Script weiter: time_diff.php
    So kannst du dann die Zeit ermitteln:


    Raus kommt dass hier: ( time_diff('19:18:00', '22:30:00') )


    Um Zu prüfen ob die Zeit vor 22 uhr idt müsstest du prinzipiell sowas machen:

    PHP
    1. $time = new DateTime("0000-00-00 ".$deinZeitStempel); //$deinZeitStempel muss etwa so aussehen 23:18 oder 23:18:00
    2. //Wenn $time größer als 22 Uhr..
    3. if($time > new DateTime("0000-00-00 22:00:00") ){
    4. #do sth
    5. }

    Dieser Beitrag wurde bereits 7 Mal editiert, zuletzt von wolf ()

  • Hallo wolf
    erst mal Happy New Year und vielen Dank für Deine Unterstützung


    Irgendwie scheint das bei mir nicht zu funktionieren.


    Da es für mich nicht ganz nachvollziehbar ist, was ich mache, resp. was ich machen soll, kann ich auch nur schwer sagen, was nicht funktioniert.


    Gruss
    Philipp

  • Das script errechnet die Stunden und Minuten unterschied zwischen zwei timestamp
    Der timestamp kann (sollte) so aussehen:

    Code
    1. 'hh:mm' # h steht für Stunde(24h Format) und m für Minute
    2. 12:40 #So beispielsweise
    3. #so darf er auch aussehen, ist aber nicht nötig (Sec werden ignoriert)
    4. hh:mm:ss # s steht für Sekunde
    5. 12:40:55


    Wenn du dem Script jetzt zwei Zeitstempel dieser Art gibts, gibt es dir den Unterschied zurück

    PHP: 38
    1. //Daten Weiterverarbeiten
    2. $times = array();
    3. while ($row = mysql_fetch_assoc($pd_date['result'])) {
    4. $times[][0] = $row['podizei_von'];//Von ist ein Zeitstempel und steht immer in [0]
    5. $times[][1] = $row['podizei_bis'];//Bis ist ein Zeitstempel und steht immer in [1]
    6. }
    7. foreach ($times as $key => $time_array) {
    8. // 'Unterschied: 09:46'
    9. echo "Unterschied: ".time_diff( $time_array[0], $time_array[1] )['t'];// time_diff(start, end)['t'] | start ist hier $time_array[0] <- Von | end ist hier $time_array[1] <- bis
    10. }

    Wenn du ab Zeile 38 mal alles durch das ersetzt müsste das richtige rauskommen.. zumindest nach dem Schema musst du arbeiten

  • Langsam verstehe ich.


    Ich hab die jetzt einen Fehler in der Zeile

    PHP
    1. echo "Unterschied: " . time_diff($time_array[0], $time_array[1])['t'];


    Was ist da falsch?

  • Sorry.


    Parse error: syntax error, unexpected '[', expecting ',' or ';' in /.../.../htdocs/test.php on line 73

  • die klammern steheh für schnell zugriff auf ein array, was von der funktion zurückgegeben wird.. time_diff muss vorher includet werden ( siehe posts oben) und rechnet die Stunden/minuten swischen zwei timestamps

  • Der Fehler kommt glaub ich von einer PHP Version, die das mit den Klammer noch nicht unterstützt.
    Weiß grad nicht ab welcher Version das unterstützt wird.
    Abhilfe wäre dann

    PHP
    1. $temp = time_diff($time_array[0], $time_array[1]);
    2. $ergebnis = $temp['t'];
  • Really? :D okay, wieder was gelernt..


    Okay, das was ich gemacht habe nennt sich Array-Dereferencing und ist erst seit PHP 5.4 implementiert
    (allerdings frage ich mich gerade wieso du eine PHP Version älter als 5.5 verwendest o.O8|

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von wolf ()