JavaScript function to add X months to a date

后端 未结 19 2392
星月不相逢
星月不相逢 2020-11-22 02:44

I’m looking for the easiest, cleanest way to add X months to a JavaScript date.

I’d rather not handle the rolling over of the year or have to write my own function.<

19条回答
  •  庸人自扰
    2020-11-22 03:27

    addDateMonate : function( pDatum, pAnzahlMonate )
    {
        if ( pDatum === undefined )
        {
            return undefined;
        }
    
        if ( pAnzahlMonate === undefined )
        {
            return pDatum;
        }
    
        var vv = new Date();
    
        var jahr = pDatum.getFullYear();
        var monat = pDatum.getMonth() + 1;
        var tag = pDatum.getDate();
    
        var add_monate_total = Math.abs( Number( pAnzahlMonate ) );
    
        var add_jahre = Number( Math.floor( add_monate_total / 12.0 ) );
        var add_monate_rest = Number( add_monate_total - ( add_jahre * 12.0 ) );
    
        if ( Number( pAnzahlMonate ) > 0 )
        {
            jahr += add_jahre;
            monat += add_monate_rest;
    
            if ( monat > 12 )
            {
                jahr += 1;
                monat -= 12;
            }
        }
        else if ( Number( pAnzahlMonate ) < 0 )
        {
            jahr -= add_jahre;
            monat -= add_monate_rest;
    
            if ( monat <= 0 )
            {
                jahr = jahr - 1;
                monat = 12 + monat;
            }
        }
    
        if ( ( Number( monat ) === 2 ) && ( Number( tag ) === 29 ) )
        {
            if ( ( ( Number( jahr ) % 400 ) === 0 ) || ( ( Number( jahr ) % 100 ) > 0 ) && ( ( Number( jahr ) % 4 ) === 0 ) )
            {
                tag = 29;
            }
            else
            {
                tag = 28;
            }
        }
    
        return new Date( jahr, monat - 1, tag );
    }
    
    
    testAddMonate : function( pDatum , pAnzahlMonate )
    {
        var datum_js = fkDatum.getDateAusTTMMJJJJ( pDatum );
        var ergebnis = fkDatum.addDateMonate( datum_js, pAnzahlMonate );
    
        app.log( "addDateMonate( \"" + pDatum + "\", " + pAnzahlMonate + " ) = \"" + fkDatum.getStringAusDate( ergebnis ) + "\"" );
    },
    
    
    test1 : function()
    {
        app.testAddMonate( "15.06.2010",    10 );
        app.testAddMonate( "15.06.2010",   -10 );
        app.testAddMonate( "15.06.2010",    37 );
        app.testAddMonate( "15.06.2010",   -37 );
        app.testAddMonate( "15.06.2010",  1234 );
        app.testAddMonate( "15.06.2010", -1234 );
        app.testAddMonate( "15.06.2010",  5620 );
        app.testAddMonate( "15.06.2010", -5120 );
    
    }
    

提交回复
热议问题