Je recherche le moyen le plus simple et le plus propre d'ajouter X mois à une date JavaScript.
Je préfère ne pas gérer le roulement de l'année ou devoir écrire ma propre fonction .
Y a-t-il quelque chose de intégré qui peut faire cela?
javascript
date
Tchad
la source
la source
Réponses:
La fonction suivante ajoute des mois à une date en JavaScript ( source ). Il prend en compte les reports d'année et les durées de mois variables:
La solution ci-dessus couvre le cas de bord de passer d'un mois avec un nombre de jours supérieur au mois de destination. par exemple.
Si le jour du mois change lors de la demande
setMonth
, nous savons que nous avons débordé le mois suivant en raison d'une différence de durée. Dans ce cas, nous utilisonssetDate(0)
pour revenir au dernier jour du mois précédent.Remarque: cette version de cette réponse remplace une version antérieure (ci-dessous) qui ne gérait pas correctement les différentes durées de mois.
la source
addMonths
fonction ici qui respecte la fin du mois (par exemple2012-01-31 + 1 month = 2012-02-29
, etc.).J'utilise moment.js bibliothèque pour des manipulations de date-heure . Exemple de code à ajouter un mois:
la source
Cette fonction gère les cas marginaux et est rapide:
tester:
Mise à jour pour les dates non UTC: (par A.Hatchkins)
tester:
la source
Étant donné qu'aucune de ces réponses ne tiendra compte de l'année en cours lorsque le mois change, vous pouvez en trouver une que j'ai faite ci-dessous qui devrait la gérer:
La méthode:
Usage:
la source
Tiré des réponses @bmpsini et @Jazaret , mais sans étendre les prototypes: utiliser des fonctions simples ( Pourquoi étendre des objets natifs est-il une mauvaise pratique? ):
Utilise le:
la source
D'après les réponses ci-dessus, le seul qui gère les cas marginaux (bmpasini de la bibliothèque datejs) a un problème:
OK mais:
pire :
Cela est dû au fait que l'heure n'est pas réglée, revenant ainsi à 00:00:00, ce qui peut alors basculer vers la veille en raison de fuseaux horaires ou de changements de temps ou autre ...
Voici ma solution proposée, qui n'a pas ce problème, et est aussi, je pense, plus élégante en ce qu'elle ne repose pas sur des valeurs codées en dur.
Unité testée avec succès avec:
la source
Comme la plupart des réponses mis en évidence, nous pourrions utiliser setMonth () méthode avec getMonth () méthode pour ajouter un nombre spécifique de mois à une date donnée.
Exemple: (comme mentionné par @ChadD dans sa réponse.)
Mais nous devons utiliser cette solution avec soin car nous aurons des problèmes avec les boîtiers de bord.
Pour gérer les cas marginaux, la réponse donnée dans le lien suivant est utile.
https://stackoverflow.com/a/13633692/3668866
la source
Solution simple:
2678400000
est de 31 jours en millisecondesMettre à jour:
Utilisez ces données pour créer notre propre fonction:
2678400000
- 31 jours2592000000
- 30 jours2505600000
- 29 jours2419200000
- 28 joursla source
Les mois ont un index basé sur 0, il devrait alerter (4) qui est 5 (mai);
la source
Juste pour ajouter à la réponse acceptée et aux commentaires.
la source
J'ai écrit cette solution alternative qui fonctionne bien pour moi. Il est utile lorsque vous souhaitez calculer la fin d'un contrat. Par exemple, début = 2016-01-15, mois = 6, fin = 2016-7-14 (c'est-à-dire dernier jour - 1):
Exemples:
la source
Voici un exemple de calcul d'une date future basée sur la saisie de la date (membershipssignup_date) + mois ajoutés (membershipsmonths) via les champs du formulaire.
Le champ membershipsmonths a une valeur par défaut de 0
Lien de déclenchement (peut être un événement onchange attaché au champ de terme d'adhésion):
la source
Comme le démontrent de nombreuses réponses complexes et laides présentées, les dates et les heures peuvent être un cauchemar pour les programmeurs utilisant n'importe quel langage. Mon approche consiste à convertir les dates et les valeurs «delta t» en Epoch Time (en ms), effectuer n'importe quelle arithmétique, puis reconvertir en «temps humain».
Cela a été écrit pour un cas d'utilisation légèrement différent, mais vous devriez pouvoir l'adapter facilement aux tâches connexes.
EDIT: Source complète ici !
la source
Tout cela semble beaucoup trop compliqué et je suppose que cela entre dans un débat sur ce que signifie exactement "un mois". Cela signifie-t-il 30 jours? Cela signifie-t-il du 1er au 1er? Du dernier jour au dernier jour?
Si c'est le cas, l'ajout d'un mois au 27 février vous amène au 27 mars, mais l'ajout d'un mois au 28 février vous amène au 31 mars (sauf les années bissextiles, où cela vous mène au 28 mars). Ensuite, en soustrayant un mois du 30 mars, vous obtenez ... 27 février? Qui sait...
Pour ceux qui recherchent une solution simple, ajoutez simplement des millisecondes et terminez.
ou
la source
d.setMonth(d.getMonth()+1)
? Ce n'est donc même pas l'idée la plus simple.la source
Parfois utile pour créer une date par un opérateur comme dans les paramètres BIRT
J'ai fait 1 mois de retour avec:
la source
Comme indiqué ci-dessus, vous pouvez ajouter un mois pour
Date
fonctionner.la source