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

Messages postés
2
Date d'inscription
lundi 25 mai 2009
Dernière intervention
22 février 2010
- - Dernière réponse : Whismeril
Messages postés
12345
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 décembre 2018
- 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 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
14268
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
5 décembre 2018
3
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...

Merci BunoCS 3

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

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de BunoCS
Messages postés
14268
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
5 décembre 2018
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
14268
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
5 décembre 2018
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
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
14268
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
5 décembre 2018
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
14268
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
5 décembre 2018
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
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
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
12345
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 décembre 2018
-
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.