Comment calculer la différence pour deux objets Date () en JavaScript, tout en ne renvoyant que le nombre de mois de la différence?
Toute aide est la bienvenue :)
javascript
date
datediff
Williamtroup
la source
la source
Réponses:
La définition du «nombre de mois dans la différence» est sujette à de nombreuses interprétations. :-)
Vous pouvez obtenir l'année, le mois et le jour du mois à partir d'un objet de date JavaScript. En fonction des informations que vous recherchez, vous pouvez les utiliser pour déterminer combien de mois s'écoulent entre deux moments.
Par exemple, tout de suite:
Afficher l'extrait de code
(Notez que les valeurs de mois dans JavaScript commencent par 0 = janvier.)
Inclure des fractions de mois dans ce qui précède est beaucoup plus compliqué, car trois jours en février typique représentent une plus grande fraction de ce mois (~ 10,714%) que trois jours en août (~ 9,677%), et bien sûr même février est une cible mobile selon que c'est une année bissextile.
Il existe également des bibliothèques de date et d'heure disponibles pour JavaScript qui facilitent probablement ce genre de chose.
Remarque : il y avait un
+ 1
dans ce qui précède, ici:C'est parce qu'à l'origine j'ai dit:
Je l'ai supprimé pour deux raisons:
Ne pas compter les mois partiels ne s'avère pas être ce que veulent beaucoup (la plupart?) Des personnes qui viennent à la réponse, alors j'ai pensé que je devrais les séparer.
Cela n'a pas toujours fonctionné même selon cette définition. :-D (Désolé.)
la source
Si vous ne considérez pas le jour du mois, c'est de loin la solution la plus simple
Sachez que l'indice mensuel est basé sur 0. Cela signifie que
January = 0
etDecember = 11
.la source
Parfois, vous voudrez peut-être obtenir juste la quantité de mois entre deux dates en ignorant totalement la partie jour. Ainsi par exemple, si vous aviez deux dates - 2013/06/21 et 2013/10/18 - et que vous ne vous souciez que des parties 2013/06 et 2013/10, voici les scénarios et les solutions possibles:
1.Si vous voulez juste le nombre de mois entre les deux dates, à l'exclusion du mois1 et du mois2
2.Si vous souhaitez inclure l'un des mois
3.Si vous souhaitez inclure les deux mois
la source
numberOfMonths=(year2-year1)*12+(month2-month1)+1;
qui fait la même chose mais est plus sémantiquement correct pour moiVoici une fonction qui fournit avec précision le nombre de mois entre 2 dates.
Le comportement par défaut ne compte que les mois entiers, par exemple 3 mois et 1 jour entraîneront une différence de 3 mois. Vous pouvez éviter cela en définissant le paramètre
roundUpFractionalMonths
surtrue
, donc une différence de 3 mois et 1 jour sera renvoyée comme 4 mois.La réponse acceptée ci-dessus (réponse de TJ Crowder) n'est pas exacte, elle renvoie parfois des valeurs erronées.
Par exemple,
monthDiff(new Date('Jul 01, 2015'), new Date('Aug 05, 2015'))
renvoie0
ce qui est manifestement faux. La différence correcte est soit 1 mois entier, soit 2 mois arrondis.Voici la fonction que j'ai écrite:
la source
Si vous devez compter des mois entiers, quel que soit le mois qui est 28, 29, 30 ou 31 jours. Ci-dessous devrait fonctionner.
Ceci est une version étendue de la réponse https://stackoverflow.com/a/4312956/1987208 mais corrige le cas où il calcule 1 mois pour le cas du 31 janvier au 1er février (1 jour).
Cela couvrira les éléments suivants;
la source
Différence en mois entre deux dates en JavaScript:
mois au total entre start_date et end_date:
la source
Je sais que c'est vraiment tard, mais le poster quand même au cas où cela aiderait les autres. Voici une fonction que j'ai inventée qui semble faire un bon travail de comptage des différences en mois entre deux dates. Il est certes beaucoup plus torride que celui de Mr.Crowder, mais fournit des résultats plus précis en parcourant l'objet de date. Il est en AS3 mais vous devriez simplement pouvoir supprimer le typage fort et vous aurez JS. N'hésitez pas à le rendre plus agréable à regarder n'importe qui là-bas!
la source
Pour développer la réponse de @ TJ, si vous recherchez des mois simples plutôt que des mois civils complets, vous pouvez simplement vérifier si la date de d2 est supérieure ou égale à d1. Autrement dit, si d2 est plus tard dans son mois que d1 est dans son mois, alors il y a 1 mois de plus. Vous devriez donc pouvoir faire ceci:
Cela ne tient pas totalement compte des problèmes de temps (par exemple le 3 mars à 16h00 et le 3 avril à 15h00), mais c'est plus précis et pour seulement quelques lignes de code.
la source
Considérez chaque date en mois, puis soustrayez pour trouver la différence.
Cela vous donnera la différence de mois entre les deux dates, en ignorant les jours.
la source
Il existe deux approches, mathématique et rapide, mais sujette aux aléas du calendrier, ou itérative et lente, mais gère toutes les bizarreries (ou du moins les délégués les manipulant dans une bibliothèque bien testée).
Si vous parcourez le calendrier, incrémentez la date de début d'un mois et voyez si nous dépassons la date de fin. Cette délégués de traitement anomalie des classes intégrées Date (), mais pourrait être lent SI vous faites cela pour un grand nombre de dates. La réponse de James adopte cette approche. Autant je n'aime pas l'idée, je pense que c'est l'approche la plus "sûre", et si vous ne faites qu'un seul calcul, la différence de performance est vraiment négligeable. Nous avons tendance à essayer de sur-optimiser les tâches qui ne seront exécutées qu'une seule fois.
Maintenant, si vous calculez cette fonction sur un ensemble de données, vous ne voulez probablement pas exécuter cette fonction sur chaque ligne (ou Dieu nous en préserve, plusieurs fois par enregistrement). Dans ce cas, vous pouvez utiliser presque toutes les autres réponses ici, sauf la réponse acceptée, qui est tout simplement erronée (différence entre
new Date()
etnew Date()
est -1)?Voici ma tentative d'une approche mathématique et rapide, qui tient compte des différentes longueurs de mois et des années bissextiles. Vous ne devriez vraiment utiliser une fonction comme celle-ci que si vous allez l'appliquer à un ensemble de données (faire ce calcul encore et encore). Si vous avez juste besoin de le faire une fois, utilisez l'approche itérative de James ci-dessus, car vous déléguez la gestion de toutes les (nombreuses) exceptions à l'objet Date ().
la source
Voici une autre approche avec moins de boucles:
la source
Vous pouvez également envisager cette solution, cela
function
renvoie la différence du mois en entier ou en nombrePasser la date de début comme premier ou dernier
param
est tolérant aux pannes. Cela signifie que la fonction renverrait toujours la même valeur.la source
Calculez la différence entre deux dates en incluant une fraction de mois (jours).
la source
Cela devrait fonctionner correctement:
la source
la source
Le code suivant renvoie des mois entiers entre deux dates en prenant également en compte le nombre de jours de mois partiels.
la source
}
la source
sous la logique va chercher la différence en mois
la source
la source
Voyez ce que j'utilise:
la source
la source
Nombre de mois pendant lesquels le jour et l'heure n'ont pas d'importance
Dans ce cas, je ne suis pas concerné par les mois complets, les mois partiels, la durée d'un mois, etc. J'ai juste besoin de connaître le nombre de mois. Un cas réel pertinent serait celui où un rapport est dû chaque mois, et j'ai besoin de savoir combien de rapports il devrait y avoir.
Exemple:
Ceci est un exemple de code élaboré pour montrer où vont les nombres.
Prenons 2 horodatages qui devraient résulter en 4 mois
Peut être légèrement différent avec votre fuseau horaire / heure tiré. Le jour, les minutes et les secondes n'ont pas d'importance et peuvent être inclus dans l'horodatage, mais nous ne le tiendrons pas compte dans notre calcul réel.
Étape 1: convertir l'horodatage en date JavaScript
Étape 2: obtenir des valeurs entières pour les mois / années
Cela nous donne
Étape 3: ajoutez
(12 * (endYear - startYear)) + 1
au mois de fin.2 + (12 * (2020 - 2019)) + 1 = 15
Étape 4: soustrayez les mois
15 - 11 = 4
; nous obtenons notre résultat de 4 mois.Exemple de 29 mois Exemple
De novembre 2019 à mars 2022, la durée est de 29 mois. Si vous les mettez dans une feuille de calcul Excel, vous verrez 29 lignes.
3 + (12 * (2022-2019)) + 1
40 - 11 = 29
la source
la source
Une approche serait d'écrire un simple service Web Java (REST / JSON) qui utilise la bibliothèque JODA
http://joda-time.sourceforge.net/faq.html#datediff
pour calculer la différence entre deux dates et appeler ce service à partir de javascript.
Cela suppose que votre back-end est en Java.
la source