Sek. in Stunden und Minuten umrechnen?

Experience1986

Erfahrenes Mitglied
Hi,

ich habe eine variable in Secunden, zum beispiel 10 Minuten sind 600 Sekunden. Ich möchte nun wissen, wie ich die Sekunden korrekt in Stunden, Minuten, Sekunden umrechnen kann.

Also, wenn ich 9 1/2 Minuten habe, dann sind das 570 Sekunden (9,5*60) und das soll dann als endergebniss so ausgegeben werden:
00:09:30, also wie eine ganz normale uhrzeit.

Ich hoffe ihr versteht was ich meine, weis nicht, wie ich es anders erklären könnt.
 
Hi,

hab dir schnell was gebaut... is zwar etwas umständlich, aber funktioniert...

siehe Anhang

ciao
 

Anhänge

  • sekunden.txt
    1,1 KB · Aufrufe: 1.889
KLASSE! Danke für den Code, muss ihn zwar erst noch verstehen, aber naja.

Leider ist aber auch in fehler im berechnen, und zwar wenn es 0 sekunden sind, also wenn man zum beispiel 60 Sekunden eingibt, dann wird 1 Minute zwar ausgegeben, aber bei Sekunden ist dann undefined.
Hab schon versucht den Fehler zu suchen, aber ohne erfolg, es gibt ja auch keine JS Meldung :(
 
Ich habe diese Funktion auch benötigt um in meinem Fall einen Ladebalken anzuzeigen in dem anstatt einer Prozent-Anzeige eine Zeit (timeleft) runtergezählt wird.

Da der Inhalt das Ladebalkens (die Anzeige h:m:s) über Javascript eingefügt wird, habe ich diese nur in Variablen gespeichert und nicht direkt in das Dokument geschrieben.

Zudem habe ich die Berechnung verallgemeinert und verkürzt. Dies geht, da man beim Umrechnen in Minuten nur noch den Rest (Modulo) der Stunden benötigt, bzw. beim Umrechnen in Sekunden nur noch den Rest durch Minuten.
Sprich: Den Rest, der sich nicht ganzzahlig in Stunden bzw. Minuten umrechnen lässt.
---
Bsp.: "Zeit in Sekunden = 125" (timeleft)
120 Sekunden entspricht 2 Minuten und einem Rest von 5 Sekunden

Rechnung:
Code:
 hour = Math.floor( timeleft / 3600 );
 minute = Math.floor( (timeleft%3600) / 60 );
 second = Math.floor( timeleft%60 );

Ergebnis:
Stunden (hour) = 0
Minuten (minute) = 2
Sekunden (second) = 5
---
Quelle zu Modulo:
http://de.wikibooks.org/wiki/Websiteentwicklung:_JavaScript:_Operatoren_und_Ausdrücke

Für Interesse an der Vorlage zum Ladebalken:
http://www.homepage-total.de/javascript/ladebalken.php#drei
Meine Änderungen in diesem Beispiel:
Code:
 var timeleft = Math.round( ziel-zaehler );
 hour = Math.floor( ziel / 3600);
 minute = Math.floor((ziel%3600) / 60);
 second = Math.floor(ziel%60);
 document.getElementById("counter3").innerHTML = "noch "+hour+":"+minute+":"+second+" h:m:s";
 window.setTimeout("load3('" + ziel + "')", 1000); //1000 für eine Sekunde
---

Ob das Beispiel von Gaisbauer für Experience1986 oder meine Kurzform jetzt Zeit-technisch schneller oder besser ist, weiß ich nicht. Ich hoffe nur, dass es einigen weiter hilft und noch einen anderen Einblick verschafft.
 
Mir ist noch eine Erweiterung des Ganzen eingefallen, falls man Minuten und Sekunden Zwei-Stellig haben will.

---
Ausgangspunkt:
Code:
 var timeleft = 3727; //1h:2m:7s
 //Umrechnung in Stunden, Minuten, Sekunden
 hour = Math.floor(timeleft / 3600);
 minute = Math.floor((timeleft%3600) / 60);
 second = Math.floor(timeleft%60);

Erweiterung:
Code:
 //Den String von Stunden, Minuten und Sekunden auf 2 Stellen ändern
 if ( hour < 10 ) {
  hour = "0"+hour;
 }
 if ( minute < 10 ) {
  minute = "0"+minute;
 }
 if ( second < 10 ) {
  second = "0"+second;
 }
---

Zur Erklärung:
In der IF-Anweisung prüfe ich, ob die ZAHL kleiner als 10 ist. Falls dies der Fall ist, soll in der geprüften VARIABLEN eine NULL ("0") und die ZAHL selbst aneinander geheftet werden.
Ich glaube, dass die vorherige ZAHL vom Typ float bzw. Typ int war und unter dem selben Variablen-Namen jetzt ein Typ string gespeichert wird.
In meinem Fall funktioniert es. Ob dies Programmiertechnisch so sauber ist, weiß ich nicht. Da ich mich zur Zeit mit vielen Programmiersprachen auseinander setzen muss, kann es sein, dass ich hier einiges vermische und mich auch mit den Variablen-Typen vertue.

Ich bastle mir halt oft SCRIPTE zurecht (ohne eine Sprache richtig zu können). Hoffe das ist nicht zum Nachteil.
 
Code:
...
 second = Math.floor(timeleft%60);
...
Hallo benôr,
die Modulo-Operation ist die Berechnung vom Rest einer Ganzzahldivision. Deshalb gibt es da eigentlich nichts mehr abzurunden.

Man könnte das auch so berechnen:
Code:
var sec = 3727; //1h:2m:7s
  //Umrechnung in Stunden, Minuten, Sekunden
  var minute = Math.floor(sec/60);
  sec %= 60;
  var hour = Math.floor(minute/60);
  minute %= 60;

Die IF-Statements in deiner Erweiterung könnte man in der Kurzform als Funktion schreiben:
Code:
function pad(n){return n<10 ? '0'+n : n}
 
Zurück