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

stotnet 2 Messages postés lundi 25 mai 2009Date d'inscription 22 février 2010 Dernière intervention - 22 févr. 2010 à 14:00 - Dernière réponse : Whismeril 12096 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 15 octobre 2018 Dernière intervention
- 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

11 réponses

Meilleure réponse
BunoCS 14173 Messages postés lundi 11 juillet 2005Date d'inscription 15 octobre 2018 Dernière intervention - 22 févr. 2010 à 14:53
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de BunoCS
BunoCS 14173 Messages postés lundi 11 juillet 2005Date d'inscription 15 octobre 2018 Dernière intervention - 22 févr. 2010 à 15:33
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
BunoCS 14173 Messages postés lundi 11 juillet 2005Date d'inscription 15 octobre 2018 Dernière intervention - 22 févr. 2010 à 14:45
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
swedikiluka 42 Messages postés samedi 19 mars 2005Date d'inscription 22 février 2010 Dernière intervention - 22 févr. 2010 à 14:51
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
BunoCS 14173 Messages postés lundi 11 juillet 2005Date d'inscription 15 octobre 2018 Dernière intervention - 22 févr. 2010 à 14:56
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
BunoCS 14173 Messages postés lundi 11 juillet 2005Date d'inscription 15 octobre 2018 Dernière intervention - 22 févr. 2010 à 15:12
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
stotnet 2 Messages postés lundi 25 mai 2009Date d'inscription 22 février 2010 Dernière intervention - 22 févr. 2010 à 15:16
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
swedikiluka 42 Messages postés samedi 19 mars 2005Date d'inscription 22 février 2010 Dernière intervention - 22 févr. 2010 à 15:23
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 12096 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 15 octobre 2018 Dernière intervention - 23 sept. 2016 à 11:41
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.