Différence en MOIS entre 2 dates (c#) [Résolu]

Messages postés
2
Date d'inscription
lundi 25 mai 2009
Statut
Membre
Dernière intervention
22 février 2010
- - Dernière réponse : Whismeril
Messages postés
13827
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 octobre 2019
- 23 sept. 2016 à 11:41
bonjour

je souhaite récupérer la différence entre 2 dates en MOIS en c#

en faisant (date1 - date2).Days on a bien le nb de jours
on peut avoir le nb d'heures, de minutes, de secondes,de millisecondes(!) mais pas le nb de mois.

par exemple si ma date1 est 01/03/2010 et ma date 2 est 01/02/2007 je veux récupérer 37 mois ou au pire (36,92) si çà tient compte de l'heure.
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
14636
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
9 octobre 2019
90
5
Merci
Sinon, pour être un peu plus "exact", je te propose le code suivant, que je n'ai pas testé
int iMonth = date1.Month - date2.Month;
int iYear = date1.Year - date2.Year;
iMonth += iYear * 12;

Je pense qu'il vaut mieux rajouter des valeurs absolues.
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...

Dire « Merci » 5

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BunoCS
Messages postés
14636
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
9 octobre 2019
90
1
Merci
@stotnet: de rien, mais n'oublie pas de cliquer sur "Réponse acceptée"


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
14636
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
9 octobre 2019
90
0
Merci
Hello,
ça veut dire quoi "un mois"? 30 jours? 31 jours? 28, 29?

Si tu suppose qu'un mois vaut 30 jours, tu peux faire ceci:
int iMonth = (date1 - date2).Days / 30;



@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
42
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
22 février 2010
0
Merci
si tu as une date 01/01/2009
et une autre 01/03/2007 tu veux avoir les mois entre les deux dates
tu fais
annee:2009-2007=2 * 12=24
mois:1-3=-2
jrs:1-1=0;
au finish 24+(-2)+0=22mois
bne chance
Commenter la réponse de swedikiluka
Messages postés
14636
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
9 octobre 2019
90
0
Merci
@swedikiluka: pourquoi rajouter les jours? si ta 1ère date est le 20.01 au lieu du 01.01..je te laisse revoir ta formule


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
14636
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
9 octobre 2019
90
0
Merci
Après quelques recherches, j'ai trouvé 2 idées:
- une méthode SqlMethods.DateDiffMonth() dans le namespace Linq (voir en fin de page)
- un code un peu plus poussé qui prend en compte la différence de longueur des mois et des années bissextiles

Hope it'll help

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
2
Date d'inscription
lundi 25 mai 2009
Statut
Membre
Dernière intervention
22 février 2010
0
Merci
MERCI A TOUS
FINALEMENT JE ME SUIS CREEE UNE PETITE FONCTION QUI FAIT :

int NbAnneesMois = (DateFin.Year - DateDebut.Year)*12;
int NbMois = DateFin.Month - DateDebut.Month;

if (DateFin.Day < DateDebut.Day)
return NbAnneesMois + NbMois - 1;
else
return NbAnneesMois + NbMois;
Commenter la réponse de stotnet
Messages postés
42
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
22 février 2010
0
Merci
au nbre de jour diviser par 30 comme moyenne soit

si tu as une date 01/01/2009
et une autre 01/03/2007 tu veux avoir les mois entre les deux dates
tu fais
annee:2009-2007=2 * 12=24
mois:1-3=-2
jrs:1-1=0/30=0;
au finish 24+(-2)+0=22mois
bne chance
Commenter la réponse de swedikiluka
0
Merci
je me permets d'ajouter ma pierre

var dateFin = sameProducts.Last().DateRange[1];
var dateDeb = sameProducts.First().DateRange[0];
if (dateFin.Month > dateDeb.Month)
{
nb = dateFin.Month - dateDeb.Month;
nb += Math.Abs((dateFin.Year - dateDeb.Year)*12);
}
else
{
nb = (12 - dateDeb.Month) + dateFin.Month;
nb += Math.Abs((dateFin.Year - dateDeb.Year)-1 * 12);
}
Commenter la réponse de filoufix
0
Merci
oublie d'une parenthèse:
nb += Math.Abs(((dateFin.Year - dateDeb.Year)-1) * 12);
Whismeril
Messages postés
13827
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 octobre 2019
309 -
Bonjour

3 minutes après ton premier message, tu aurais le modifier, en cliquant sur "modifier", c'est possible pendant une heure environ.

D'autre part, tu exhumes un sujet résolu, vieux de plus de 6ans, pour apporter une solution hors contexte et "fausse".

Tu nous proposes des variables qui sortent d'en ne sait ou et déclarées var, or avec var, on ne peut pas faire de calcul sur les dates <gras></saufgras> à ce que avant (qui n'est pas montré) l'IDE sache précisément qu'il s'agit de date.

Var est à proscrire dans 99% des cas, il ne doit être utilisé que et uniquement que dans une requête Linq ou tu crées un type anonyme (et donc pas prédéfini)
Commenter la réponse de filoufix