datum unter berücksichtigung von schaltjahr... hoch/hinunterzählen

Biergamasda

Erfahrenes Mitglied
Also, gleich zum Problem :D

hab mir da mal ein kleines Script gebaut, das mal nur hochzählen kann :)

HTML:
function changeDate(cmd,datum)
    {
        var dmj = datum.split('.');
        if(cmd == 'next')                                           //Wenn Tag hochzuhählen ist
        {
            if (dmj[1] == 12 && dmj[0] == 31)                       //Wenn der 31. 12. erreicht
            {
                dmj[2]++;                                           //Jahr um 1 erhöhen
            }
            
            //Wenn Monat mit 31 Tagen
            if (dmj[1] == 01 || dmj[1] == 03 || dmj[1] == 05 || dmj[1] == 07 || dmj[1] == 08 || dmj[1] == 10 || dmj[1] == 12)
            {
                if(dmj[1] == 12 && dmj[0] == 31)                    //Wenn der 31.12. ist, Monat auf 0 setzen
                    dmj[1] = 0;
                
                if(dmj[0] == 31)                                    //Wenn der 31. eines x-beliebigen Monats ist
                {
                    dmj[1]++;                                       //Monat um 1 erhöhen
                    dmj[0] = 0;                                    //Tag auf 0 setzen;
                }                
            }

            //Wenn Monat mit 30 Tagen bzw Februar            
            else if (dmj[1] == 02 || dmj[1] == 04 || dmj[1] == 06 || dmj[1] == 09 || dmj[1] == 11)
            {
                if (dmj[1] == 02)                                   //Wenn Februar ist
                {
                    if((dmj[2]/4) == 0)                             //Wenn Jahr ein Schaltjahr ist
                        if(dmj[0] == 29)                            //setze falls Tag 29 ist wieder auf 0
                        {
                            dmj[0] = 0;
                            dmj[1]++;
                        }
                    else                                            //Wenn Jahr kein Schaltjahr ist
                        if(dmj[0] == 28)                            //Setze falls Tag 28 wieder auf 0
                        {
                            dmj[1] ++;
                            dmj[0] = 0;
                        }
                }
                else
                    if(dmj[0] == 30)
                    {
                        dmj[1]++;
                        dmj[0] = 0;
                    } 
            }
            if(dmj[1] < 10)
            {
                if(dmj[1].length == 1)
                    dmj[1] = '0'+dmj[1];
            }
            dmj[0]++;
        }
//-------------------------------------------------------------------------------------------------------------------------------
                
        else                                                        //Wenn Tag zurückzuzählen ist
        {
        }
        document.getElementById("filmvorschaudatum").firstChild.nodeValue = dmj[0]+'.'+dmj[1]+'.'+dmj[2];
    }

Das Hochzählen macht noch den Fehler, dass es, wenn der Monat überspringt, beim 1. des Monats statt 0x nur x anzeigt, und erst ab dem 2. 0x angezeigt wird.
Die ist jedoch nicht mein Hauptproblem :)

Wie man sieht, ist das ganze ziemlich umfangreich und unübersichtlich, und jetz hätte ich mir gedacht, dass das doch irgendwie einfacher auch gehen muss.
Gibt es da nicht vieleicht in JScript so eine Funktion, die einen Tag dazu bzw abziehen kann und dabei die Monatslänge und das Schaltjahr berücksichtigt?

Wäre dankbar wenn mir da jemand bissl weiterhelfen könnte :D

lg Masda
 
naja....nehme den Timestamp des Ausgangsdatums, und addiere/subtrahiere davon die ms der Tagesanzahl.

Das Ergebnis wandle dann wieder in ein Datumsformat um...fertig.
 
Javascript hat dafür extra Datumsfunktionen. Benuzte sie, wie Sven es gesagt hat. Man muss nicht immer das Rad neu erfinden.
Javascript:
function changeDate(cmd,datum) {
    var dmy = datum.split('.'),
        datum = new Date(dmy[2],Number(dmy[1])-1,dmy[0])
    ;
    datum = new Date(
        datum.getTime() + (cmd == 'next' ? 24*60*60*1000 : -24*60*60*1000) 
    );
    document.getElementById("filmvorschaudatum").firstChild.nodeValue = 
        datum.getDate() +'.'+ (datum.getMonth()+1) +'.'+ datum.getFullYear()
    ;
}
Sieht mir irgendwie nach deutlich weniger Code aus... ;-)
 
Zuletzt bearbeitet:
hmm, eindeutig weniger :D

falls doch mal jemand wissen will, wie sowas "zufuß" funktioniert, bin ja schließlich lange dabeigesessen :D

Javascript:
function changeDate(cmd,datum)
{
    var dmj = datum.split('.');
    if(cmd == 'next')                                           //Wenn Tag hochzuhählen ist
    {
        if (dmj[1] == 12 && dmj[0] == 31)                       //Wenn der 31. 12. erreicht
        {
            dmj[2]++;                                           //Jahr um 1 erhöhen
        }
        
        //Wenn Monat mit 31 Tagen
        if (dmj[1] == 01 || dmj[1] == 03 || dmj[1] == 05 || dmj[1] == 07 || dmj[1] == 08 || dmj[1] == 10 || dmj[1] == 12)
        {
            if(dmj[1] == 12 && dmj[0] == 31)                    //Wenn der 31.12. ist, Monat auf 0 setzen
                dmj[1] = 0;
            
            if(dmj[0] == 31)                                    //Wenn der 31. eines x-beliebigen Monats ist
            {
                dmj[1]++;                                       //Monat um 1 erhöhen
                dmj[0] = 0;                                     //Tag auf 0 setzen;
            }                
        }

        //Wenn Monat mit 30 Tagen bzw Februar            
        else if (dmj[1] == 02 || dmj[1] == 04 || dmj[1] == 06 || dmj[1] == 09 || dmj[1] == 11)
        {
            if (dmj[1] == 02)                                   //Wenn Februar ist
            {
                if((dmj[2]/4) == 0) 
                {                            //Wenn Jahr ein Schaltjahr ist
                    if(dmj[0] == 29)                            //setze falls Tag 29 ist wieder auf 0
                    {
                        dmj[0] = 0;
                        dmj[1]++;
                    }
                }
                else                                            //Wenn Jahr kein Schaltjahr ist
                {
                    if(dmj[0] == 28)                            //Setze falls Tag 28 wieder auf 0
                    {
                        dmj[1]++;
                        dmj[0] = 0;
                    }
                }
            }
            else
                if(dmj[0] == 30)
                {
                    dmj[1]++;
                    dmj[0] = 0;
                } 
        }                                              
        dmj[0]++;                                               //Tag inkrementieren
    }
//-------------------------------------------------------------------------------------------------------------------------------
            
    else                                                        //Wenn Tag zurückzuzählen ist
    {
        if(dmj[0] == 01)                                        //Wenn der 1. Tag im Monat ist
        {
            if(dmj[1] == 01)                                    //Wenn der 01.01. ist (sprich Januar)
            {
                dmj[2]--;                                       //Jahr um eins hinunterzählen
                dmj[1] = 13;                                    //Monat auf 13 setzen
                dmj[0] = 32;                                    //Tag auf den 32. setzen
            }
            
            //Wenn aktueller Monat 31 Tage hat
            if(dmj[1] == 03 || dmj[1] == 05 || dmj[1] == 07 || dmj[1] == 08 || dmj[1] == 10 || dmj[1] == 12)
            {                    
                if(dmj[1] == 03)                                //Wenn folgender Monat Februar ist
                {
                    if((dmj[2]/4) == 0)                         //Wenn Jahr ein Schaltjahr ist
                    {
                        dmj[0] = 30;                            //Tag auf 30 setzen
                    }
                    else                                        //Wenn kein Schaltjahr ist
                    {
                        dmj[0] = 29;                            //Tag auf 29 setzen
                    }
                }
                else                                            //Wenn folgender Monat 30 Tage hat
                    dmj[0] = 31;                                //Tag auf 31 setzen
             
            }
            
            //Wenn aktueller Monat 30 Tage hat
            else if(dmj[1] == 02 || dmj[1] == 04 || dmj[1] == 06 || dmj[1] == 09 || dmj[1] == 11)
            {
                dmj[0] = 32;
            }                            
            dmj[1]--;                                           //Monat dekrementieren
        }
        dmj[0]--;                                               //Tag dekrementieren
    }
    
    if(dmj[1] < 10)                                             //Führende 0 beim Monat anhängen
    {                                                   
        if(dmj[1].length != 2)                                  //jedoch nur wenn erforderlich
            dmj[1] = '0'+dmj[1];
    }
    if(dmj[0] < 10)                                             //Führende 0 beim Tag anhängen
    {
        if(dmj[0].length != 2)                                  //Wiederum nur wenn erforderlich
            dmj[0] = '0'+dmj[0];
    }
    document.getElementById("filmvorschaudatum").firstChild.nodeValue = dmj[0]+'.'+dmj[1]+'.'+dmj[2];
}


ich werd dein script gleich mal einbauen und testen :D

lg und vielen Dank
Masda
 
Ah, ok, dann is logisch dass da 31. stand :D

Nochmal danke für die Einführung in die Date Funktionen - sind echt praktisch :D

lg Masda
 

Neue Beiträge

Zurück