var d = new Date();
d.setMonth(d.getMonth() - 3);
Cela fonctionne pour janvier. Exécutez cet extrait:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());
Il y a quelques mises en garde ...
Un mois est une chose curieuse. Comment définissez-vous 1 mois? 30 jours? La plupart des gens diront qu'il y a un mois signifie le même jour du mois sur la citation du mois précédent nécessaire . Mais plus de la moitié du temps, c'est-à-dire il y a 31 jours, pas 30. Et si aujourd'hui est le 31 du mois (et ce n'est ni août ni décembre), ce jour du mois n'existe pas le mois précédent.
Fait intéressant, Google est d'accord avec JavaScript si vous lui demandez quel jour est un mois avant un autre jour :
Il dit également qu'un mois dure 30,4167 jours :
Alors, un mois avant le 31 mars est-il le même jour qu'un mois avant le 28 mars, 3 jours plus tôt? Tout dépend de ce que vous entendez par «un mois avant». Allez avoir une conversation avec votre propriétaire de produit.
Si vous voulez faire comme momentjs et corriger ces erreurs du dernier jour du mois en passant au dernier jour du mois, vous pouvez faire quelque chose comme ceci:
const d = new Date("March 31, 2019");
console.log(d.toLocaleDateString());
const month = d.getMonth();
d.setMonth(d.getMonth() - 1);
while (d.getMonth() === month) {
d.setDate(d.getDate() - 1);
}
console.log(d.toLocaleDateString());
Si vos exigences sont plus compliquées que cela, utilisez des mathématiques et écrivez du code. Vous êtes développeur! Vous n'avez pas besoin d'installer une bibliothèque! Vous n'avez pas à copier et coller à partir de stackoverflow! Vous pouvez développer le code vous-même pour faire exactement ce dont vous avez besoin!
Je recommande d'utiliser une bibliothèque appelée Moment.js.
Il est bien testé, fonctionne entre navigateurs et côté serveur (je l'utilise à la fois dans les projets Angular et Node). Il prend en charge les dates locales.
http://momentjs.com/
.format()
renvoie une représentation sous forme de chaîne de la date au format ISO 8601 . Vous pouvez également l'utiliser avec un format de date personnalisé comme celui-ci:.format('dddd, MMMM Do YYYY, h:mm:ss a')
la source
Un "one liner" (sur plusieurs lignes pour une lecture facile)) à mettre directement dans une variable:
la source
Pour simplifier les choses, vous pouvez utiliser DateJS, une bibliothèque de dates pour JavaScript:
http://www.datejs.com/
Exemple de code pour vous:
la source
Cela devrait gérer l'addition / soustraction, il suffit de mettre une valeur négative pour soustraire et une valeur positive pour ajouter. Cela résout également le problème de croisement mensuel.
la source
Si la
setMonth
méthode proposée par gilly3 n'est pas ce que vous recherchez, pensez à:Peut être utilisé pour n'importe quelle durée, il suffit de définir les bons multiples.
la source
Date
classe, et autant que Date.js soit préférée, elle modélise au moins un calendrier prolptique clément qui est assez bon pour un usage occasionnel.setTime()
?J'aime la simplicité de la réponse de gilly3 , mais les utilisateurs seront probablement surpris qu'un mois avant le 31 mars soit le 3 mars. J'ai choisi d'implémenter une version qui colle à la fin du mois, donc un mois avant les 28, 29, 30 mars, et 31 seront tous le 28 février quand ce n'est pas une année bissextile.
la source
Il y a déjà une réponse élégante mais je trouve que c'est difficile à lire alors j'ai fait ma propre fonction. Pour mes besoins, je n'avais pas besoin d'un résultat négatif mais ce ne serait pas difficile à modifier.
la source
la source
C'est le code le plus petit et le plus simple.
Déclarez la variable qui a la date actuelle. Ensuite, simplement en utilisant la fonction intégrée setMonth, nous pouvons obtenir une date de retour de 3 mois.
la source
Dans mon cas, je devais soustraire 1 mois à la date actuelle. La partie importante était le numéro du mois, donc peu importe dans quel jour du mois en cours vous êtes, j'avais besoin du mois dernier. Voici mon code:
Soustraire 1 mois à la date réelle, ce n'est pas exact, c'est pourquoi, en premier lieu, j'ai défini le premier jour du mois (le premier jour de chaque mois est toujours le premier jour) et en second lieu, je soustrais 1 jour, qui vous envoie toujours au mois dernier. J'espère vous aider mec.
la source
la source
Passez un objet Date JS et un entier du nombre de mois que vous souhaitez ajouter / soustraire.
monthsToAdd
peut être positif ou négatif. Renvoie un objet de date JS.Si vous êtes
originalDateObject
le 31 mars et que vous passez -1 commemonthsToAdd
, la date de sortie sera le 28 février.Si vous passez un grand nombre de mois, disons 36, il gérera également correctement l'ajustement de l'année.
la source
la source
la source