# Sek. in Stunden und Minuten umrechnen?



## Experience1986 (10. April 2003)

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.


----------



## Andreas Gaisbauer (10. April 2003)

Hi,

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

siehe Anhang

ciao


----------



## Experience1986 (10. April 2003)

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


----------



## Andreas Gaisbauer (10. April 2003)

jetzt passts


----------



## Experience1986 (10. April 2003)

Bin kurz vor deiner antwort auch drauf gekommen. aber DANKE.


----------



## benôr (28. August 2011)

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:

```
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:

```
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.


----------



## benôr (28. August 2011)

Mir ist noch eine Erweiterung des Ganzen eingefallen, falls man Minuten und Sekunden Zwei-Stellig haben will.

---
*Ausgangspunkt*:

```
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*:

```
//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.


----------



## hela (28. August 2011)

benôr hat gesagt.:


> ```
> ...
> 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:

```
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:

```
function pad(n){return n<10 ? '0'+n : n}
```


----------

