Denkanstoß: Umrechnung von Rundenzeiten

  • Themenstarter Themenstarter adlershof
  • Beginndatum Beginndatum
A

adlershof

Hallo Tutorials-Community,

da ich für meine Freunde und mich gerade an einem Portal für unsere Motorsportaffinität und unseren dazugehörigen Spielen arbeite, benötige ich einen Denkanstoß von euch. Speziell geht es mir um die Rundenzeiten auf einer Strecke in diesem Format '1:25.908'.

Mein Vorhaben ist es, die Rundenzeit als Integer in Datenbank abzuspeichern. Mein Gedankengang ist es, dies über eine Funktion zumachen. Ich hatte mir gedacht, über die explode Funktion dies erstmal als array aufzuteilen. Dann fehlt es mir allerdings an Ideen, wie ich dies zu einem Integer zusammen bekomme.

Google hat mir als externe Anregung bisher auch nicht weitergeholfen. Vielleicht könnte Ihr mir helfen, wie ich weiter vorankomme.
 
Hallo

ist es nötig, mit den Wertzen zu rechnen, sie größenmäßig zu ordnen etc.?
Wenn nein, warum nicht einfach als String speichern?

Zum int-umwandeln:
Wie wärs einfach mit Millisekunden?
Wenn du 1, 25 und 908 aufgetrennt hast in die Variablen $min, $sek, $ms:
PHP:
$ms_total = (60 * $min + $sek) * 1000 + $ms;
Für 1:25.908 sollte 85908 rauskommen.

Um ms_total wieder rückzuwandeln:
PHP:
$min = (int)($ms_total / 60000);
$sek = ((int)($ms_total / 1000)) % 60;
$ms = $ms_total % 1000;
 
die Werte größenmässig zu ordnen wird nötig sein, wenn sich der Fahrer anschaut, mit welchem Setup er am schnellsten war. die Setupwerte kann er in dem Portal nämlich auch speichern. ansonsten werden offizielle Trainingszeiten per Hand nach der Reihenfolge eingetragen.

Die Rundenzeit auseinander zunehmen ergibt bei mir genau das selbe Ergebnis wie bei dir, aber mein jetziges Problem ist, dass die Rundenzeit beim auslesen zwar im x:xx.xxx Format ausgegeben wird, aber nicht mit der Zeit wie sie eingegeben wurde.
 
PHP:
function secintime($ms_total) {
$min = (int)($ms_total / 60000);
$sek = ((int)($ms_total / 1000)) % 60;
$ms = $ms_total % 1000;

return sprintf('%02d:%02d.%03d',
        $min, $sek, $ms);
}

das ist mein Gedanke, wie die Zeit wieder ausgegeben werden könnte, ergibt aber an dem Beispiel '1:25.908' - 22728:49.8210
 
Und was wird als Parameter übergeben?
Zeig bitte mal genau das, was du ausführst.
Der Teil macht nicht so eine Ausgabe.
 
Nachdem ich das ein paar Minuten hab ruhen lassen, fiel mir ein Fehler auf, der von einer anderen Datei kam.

PHP:
<?php echo secintime('85908'); ?>

Jetziges Ergebnis: 1:25.9080

PHP:
<?php function secintime($ms_total) {
$min = (int)($ms_total / 60000);
$sek = ((int)($ms_total / 1000)) % 60;
$ms = $ms_total % 1000;

return sprintf('%01d:%02d.%03d',
        $min, $sek, $ms);
} ?>

Was mir aber auffällt ist, dass die 908 mit vier anstatt drei Stellen angezeigt werden. Hat das mit den $ms = ... zutun oder weshalb?
 
Zuletzt bearbeitet von einem Moderator:
Zurück