262 votes

La fonction JavaScript pour ajouter X mois à une date

Est-il intégré dans l'équivalent de la .NET framework est AddMonth fonction ou VB de la fonction DateAdd?

Je suis à la recherche de la méthode la plus simple, la plus propre façon d'ajouter de X mois à un Javascript date.

Je préfère ne pas gérer la rolloing au cours de l'année, comme le fait ici.

ou dois écrire ma propre fonction comme le fait ici.

Est-il quelque chose de construit dans, qui est aussi beau que l' .NET Date.AddMonths fonction? Ou quelque chose d'approchant?

374voto

ChadD Points 4453

Je pense que cela devrait le faire :

Selon moi, qu'il doit pouvoir gérer automatiquement incrémenter à l’année appropriée et les mod-ing pour le mois approprié.

Essaie

4voto

Ben Points 6731
<pre><code></code><p>Mois ont un index de base 0, il faut alert(4) soit 5 (mai) ;</p></pre>

2voto

iamjt Points 38

Juste pour ajouter à la réponse acceptée et les commentaires.

0voto

John G Points 11

Voici un exemple de la façon de calculer une date ultérieure basée sur l’entrée de date (membershipssignup_date) + ajouté mois (membershipsmonths) par l’intermédiaire de champs de formulaire.

Le champ membershipsmonths a la valeur par défaut 0

Lien de déclenchement (peut être un événement onchange rattachée au champ de durée d’adhésion) :

-1voto

ea234 Points 1
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 );

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X