Laden...

Monatsdifferenz zwischen 2 DateTime Werten ermitteln

Erstellt von el_cubanito vor 14 Jahren Letzter Beitrag vor 14 Jahren 5.365 Views
E
el_cubanito Themenstarter:in
1 Beiträge seit 2009
vor 14 Jahren
Monatsdifferenz zwischen 2 DateTime Werten ermitteln

Hallo Zusammen,

Bin in der .Net-Welt noch absoluter Newby und bräuchte daher etwas Nachhilfe!

Ich habe eine Datum welches in der Zukunft liegt und möchte die Anzahl Monate bis zu diesem Datum ermitteln.

Soweit bin ich:

          
double diff;
DateTime Date = new DateTime();
TimeSpan timespan = new TimeSpan();

timespan = date.Subtract(DateTime.Now);
diff = timespan.TotalDays; 

Hat jmd. eine Idee wie ich jetzt anhand der AnzahlTage zu den korrekten Monaten komme? -> Ich müsste vom aktuellen Monat bis zum Monat/ Jahr des Date Feldes schleifen und jeweils die Day's in Month abziehen..
-> Wäre dies der einzige Weg? Wie würde dies ansatzweise in Code aussehen?

-> Gibt es eine Alternative?

Vielen Dank für eure Hilfe 😉
Gruß

N
1 Beiträge seit 2009
vor 14 Jahren

Hallo el_cubanito,

du könntest eine Funktion schreiben, die Schritt für Schritt einen Monat in die Zukunft schaut und prüft, ob der Zielmonat erreicht wurde. Die Anzahl der Schritte ergeben dann die Anzahl der Monate. Die Funktion könnte beispielsweise so aussehen:


private int GetMonths(DateTime from, DateTime to)
{
	int result = 0;
	DateTime tempDateTime = from;
	while (tempDateTime.Year != to.Year || tempDateTime.Month != to.Month)
	{
		tempDateTime = tempDateTime.AddMonths(1);
		result++;
	}
	return result;
}

Der Aufruf würde dann so aussehen:


DateTime heute = DateTime.Now;
DateTime weihnachten = new DateTime(2009, 12, 24);

int monateBisWeihnachten = GetMonths(heute, weihnachten);

Viele Grüße
Nils

2.223 Beiträge seit 2005
vor 14 Jahren

Hallo el_cubanito und Herzlich Willkommen,

um dich auf den richtigen Weg zu bringen,

zb. DateTime besitzt ein Property Month

Herzliche Grüße
BlackCoin

D
78 Beiträge seit 2007
vor 14 Jahren

Oder so:

public static int TotalMonths(DateTime from, DateTime to)
{
      int result = ( to.Year - from.Year ) * 12 + to.Month - from.Month;
      return to.Day < from.Day ? result-1 : result;
}
J
3.331 Beiträge seit 2006
vor 14 Jahren

Hallo und ebenfalls willkommen, auch an Nils!

TimeSpan.TotalDays ist nicht ganz so gut; besser ist TimeSpan.Days. Daraus müsste die Anzahl der Monate errechnet werden, entweder nährerungsweise mit Division durch 30 oder durch eine Schleife. Beides ist aber umständlicher, weshalb auch Nils' Vorschlag nicht besonders gut ist.

Sinnvoll ist deshalb nur blackcoins Vorschlag. Du musst bei der Subtraktion zweier Monate nur noch einen Jahreswechsel berücksichtigen. (Ich drücke mich absichtlich schwammig aus, damit du selbst noch etwas zu überlegen hast.)

Gruß Jürgen

/Grrrh
David wollte dieses Nachdenken übernehmen.