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

Ordi

Grünschnabel
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
 
Code:
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(', '));
}
 
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?
 
Ersetze die for-Schleife mal durch:
Code:
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;
    }
 
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
 
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:
Code:
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;
    }
 
Zuletzt bearbeitet:
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
 

Neue Beiträge

Zurück