Différence en MOIS entre 2 dates (c#)

Résolu
stotnet Messages postés 2 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 22 février 2010 - 22 févr. 2010 à 14:00
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 - 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.

10 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
22 févr. 2010 à 14:53
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...
5
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
22 févr. 2010 à 15:33
@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...
1
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
22 févr. 2010 à 14:45
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...
0
swedikiluka Messages postés 42 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 22 février 2010
22 févr. 2010 à 14:51
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
22 févr. 2010 à 14:56
@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...
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
22 févr. 2010 à 15:12
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...
0
stotnet Messages postés 2 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 22 février 2010
22 févr. 2010 à 15:16
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;
0
swedikiluka Messages postés 42 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 22 février 2010
22 févr. 2010 à 15:23
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
0
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);
}
0
oublie d'une parenthèse:
nb += Math.Abs(((dateFin.Year - dateDeb.Year)-1) * 12);
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 656
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)
0
Rejoignez-nous