kleines Problen bei Zeitberechnung

  • Hallo zusammen!

    Das is eigentlich ne ganz einfache Geschichte - aber irgendwie funzt es nicht so wie es soll.

    Also:
    Ich lese aus einer DB Zeitangaben aus - z.B. 00:05:12, also 5 Minuten 12 Sekunden

    Diese Zeitangabe möcht ich multiplizieren z.B. mit 2 (Ergebnis ist also 10 Minuten 24 Sekunden)

    Das ist das Script: Erst alles is Sekunden zerlegen, berechnen und wieder umwandeln...

    Nun mein Problem ist jetzt dass als Ergebnis nicht 00:10:24 rauskommt, sondern 01:10:24.

    Weiss nicht wo die eine Stunde herkommt - hab mir alle Variablen ausgeben lassen und die taucht nirgends auf.

    Gruss, Donkey

  • Du hättest dir auch mal $zeit ausgeben lassen sollen, dann hättest du gesehen, dass die Sekunden durchaus stimmen, und dass dein "Problem" nur in der date()-Funktion liegen kann.
    Diese startet die Zeitangaben eben nicht bei 00:00:00 sondern bei 01:00:00.
    Damit kommt deine Uhrzeit 01:10:24 heraus.

    Mir fällt grad spontan keine alternative Funktion ein die genau das macht was du möchtest, obwohl ich fast wetten würde, dass es eine gibt.
    Du kannst aber hier auch einfach tricksen indem du $zeit noch zusätzlich um 82800 erhöhst (=23 Stunden). Damit kriegst du dann deine Zeit ab 00:00:00 ausgegeben, in deinem Beispiel also 00:10:24.
    Das funktioniert aber auch nur bei Zeiten <24 Stunden, ab da fängts dann wieder bei 0 an.

    Also einfach die Zeile hier in deinem Script anpassen:

    PHP
    $zeit = ($stunde + $minute + $sekunde) * $menge + 82800;

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • warum 23? 1 + 23 = 24 = 0
    Damit startest du dann halt bei 0 uhr statt bei 1 uhr.
    1 Stunde abziehen, probiers halt mal aus, ich vermute dass date() keine negativen timestamps annehmen wird, aber probieren geht über studieren ;)

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • So funktioniert das dann auch. Kann aber sein, dass es auch ne fertige php-funktion gibt die genau das macht, fällt mir aber grad keine ein.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Wobei ich nicht mit str_pad arbeiten würde, sondern printf bei der Ausgabe benutzen würde. Denn wenn man eventuell weitere Berechnungen durchführen will, ist das Ergebnis von str_pad eher störend.

  • str_pad — Erweitert einen String unter Verwendung eines anderen Strings auf eine bestimmte Länge

    PHP
    $sekunden = ($stunde + $minute + $sekunde) * $menge;
    $stunden = floor($sekunden/3600);
    $sekunden -= $stunden * 3600;
    $minuten = floor($sekunden/60);
    $sekunden -= $minuten * 60;
    printf ("%02d:%02d:%02d", $stunden,$minuten,$sekunden);
  • Das sieht eigentlich einfacher aus - damit muss ich aber noch bissl rumprobieren.

    Wo die Zeit stehen sollte wird die Stringlänge angezeigt und die Zeit steht ganzwoanders (da wo eigentlich nichts stehen sollte) :D

    War warscheinlich zu dämlich das richtig einzubauen :D

    Aber danke dafür ;)

    EDIT:

    hab sprintf draus gemacht - jetzt is es perfekt