# Funktion: Sekunden --> Jahre, Monate, Tage, Stunden, Minuten, Sekunden



## Ordi (23. September 2004)

Hallo!

Ich suche eine Funktion, die mir eine gegebene Sekundenanzahl in Jahre, Monate, Tage, Stunden, Minuten, Sekunden ausgibt.

Also angenommen ich habe 31 536 000 sekunden gegeben, sollte die funktion ausgeben: 1 Jahr, 0 Monate, 0 Tage, etc. 

Hat jemand von euch eine Funktion bei der Hand oder eine Idee wie ich die Funktion realisieren kann?

Vielen Dank im Voraus!

Gruß,
Ordi


----------



## Sven Mintel (24. September 2004)

```
function funktion(intSec)
{
arrParts = [
            [31536000,' Jahr','e'],
            [2592000,' Monat','e'],
            [86400,' Tag','e'],
            [3600,' Stunde','n'],
            [60,' Minute','n'],
            [1,' Sekunde','n']
           ];
for(j = 0; j < arrParts.length; ++j)
    {
    strPart  = parseInt((intSec / arrParts[j][0]).toString(2)) + arrParts[j][1];
    strPart += (parseInt(intSec / arrParts[j][0]) != 1)?arrParts[j][2]:'';
    intSec   = intSec%arrParts[j][0]; arrParts[j] = strPart;
    }
return(arrParts.join(', '));
}
```


----------



## Ordi (24. September 2004)

Vielen Dank!

Funktioniert hervorragend! 

Gruß,
Ordi


----------



## Ordi (24. September 2004)

Stimmt doch nicht ganz...

86501 Sekunden ergibt zum Beispiel:
0 Jahre, 0 Monate, 1 Tag, 0 Stunden, 1 Minute, 101001 Sekunden

Ähnliche Fehler treten noch an ähnlichen Stellen auf.

Gibt es eine Möglichkeit diese Fehler zu korrigieren?


----------



## Sven Mintel (24. September 2004)

Ersetze die for-Schleife mal durch:
	
	
	



```
for(j = 0; j < arrParts.length; ++j)
    {
    strPart  = (j == arrParts.length-1)?intSec:parseInt((intSec / arrParts[j][0]).toString(2));
    strPart += arrParts[j][1];
    strPart +=(parseInt(intSec / arrParts[j][0]) != 1)?arrParts[j][2]:'';
    intSec   = intSec%arrParts[j][0]; arrParts[j] = strPart;
    }
```


----------



## Ordi (24. September 2004)

auch falsch, mein oben genanntes beispiel funktioniert zwar jetzt aber zum bsp 99999 sekunden ergibt: 0 Jahre, 0 Monate, 1 Tag, 11 Stunden, 101110 Minuten, 39 Sekunden.

ich versuch zwar auch den fehler zu finden, hab aber probleme das script nachzuvollziehen. 

gruß,
ordi


----------



## Sven Mintel (24. September 2004)

Dann versuchs weiter


----------



## Ordi (24. September 2004)

hast du keine idee mehr?


----------



## Sven Mintel (24. September 2004)

Das Problem ist, dass Javascript je nach Belieben ein Rechnungsergebnis auch mal in Exponentialschreibweise liefert....dann kommen merkwürdige Ergebnisse heraus, wenn damit weitergerechnet wird.

Letzter Versuch:

```
for(j = 0;j < arrParts.length; ++j)
    {
    strPart  = (String(intSec / arrParts[j][0]).match(/e/))
                    ? parseInt((intSec / arrParts[j][0]).toString(2))
                    : parseInt(intSec / arrParts[j][0]);
    strPart += arrParts[j][1];
    strPart +=(parseInt(strPart) != 1)?arrParts[j][2]:'';
    intSec   = intSec%arrParts[j][0]; arrParts[j] = strPart;
    }
```


----------



## Ordi (24. September 2004)

Jetzt scheint wirklich alles zu funktionieren...

Danke für deine Mühe.
Und wenn ich den Code verstanden habe melde ich mich wieder. ^^

Gruß,
Ordi


----------

