Bräuchte Formel für Datumsdifferenz in Tagen

MichaelH.

Banned
Registriert
Mai 2012
Beiträge
1.495
Und zwar habe ich folgendes vor:

ich habe ein Textfeld, dass nur sichtbar ist, wenn der Kunde in den nächsten 7 Tagen Geburtstag hat, oder in den letzten 14 Tagen Geburtstag hatte.

In diesem Feld soll jetzt einfach nur ausgegeben werden, wieviele Tage sein Geburtstag schon her ist, oder in wievielen Tagen er Geburtstag hat.

Als Beispiel:

Kunde ist am 15.01.1970 geboren.
Heute ist der 10.01.2013. In dem Feld soll also einfach nur "+5" stehen

Wenn der Kunde am 3.1.1967 geboren ist, soll in dem Feld einfach nur "-7" stehen.

Die Formeln dafür, die mir zur verfügung stehen sind in der PDF angehängt.

Ist hier jemand fit in dem Bereich und kann mir die Formel dafür sagen?
 

Anhänge

Sowas ist in 95% der Fälle in irgendeiner Standardbibliothek für die meisten Sprachen. Ausser vielleich in VBA Office oder so was. Deswegen solltest du die Frage von asdfman beantworten.
 
Wahrscheinlich .NET, in C#
Code:
  DateTime vorher;
  DateTime nachher;

  days = nachher.Subtract(vorher).Days;

oder so ähnlich.

geändert: Möglicherweise auch Visual Basic, siehe Seite 218 unten (wie auch von computerbase107 angemerkt):

Code:
DateDiff
Aufgabe:
Berechnet den Abstand der übergebenen Datumswerte in Tagen.
 
Zuletzt bearbeitet:
Schaue Dir einmal die Seite 218 letzte Zeile an und von dort aus weitergehen.

Den Rest solltest Du selbst schaffen.
 
@ compterbase107

Du meinst die Zeile "DateDiff (Date("04.07.1776"), Date("04.04.1975")) Ergebnis: 72591"

Falls ja, die hab ich auch schon angeschaut.
Aber da komme ich eben nicht weiter.

Ich muss ja die Unterschiedlichen Jahre noch wegkriegen.
 
hi!

ich würde es ungefähr so machen, syntax ist wahrscheinlich falsch da ich das programm nicht habe :)

1. tag und monat des geburtstages mit aktuellem jahr erstellen
dateymd(year(today),month(datum),day(datum))

2. damit dann ein datediff machen

allerdings wird damit der jahreswechsel nicht berücksichtigt:
31.12.1979 würde aufgelöst werden zu
datediff(31.12.2013,10.01.2013)

müsste aber natürlich
datediff(31.12.2012,10.01.2013)
sein.

andersrum natürlich genauso, nur das dann das nächste jahr benutzt werden müsste (z.b. geburtstag am 1. januar, heute ist der 31.12.)

da muss also noch eine abfrage rein...

mir fällt jetzt leider keine bessere lösung als brute force ein. war ein anstrengender tag heute :)
also einmal den unterschied mit diesem jahr, einmal den unterschied mit letztem jahr und einmal den unterschied mit nächstem jahr. der kleinste wert gewinnt.

da weiss sicher jemand einen logischen einzeiler.

ich hoffe ich konnte einen denkanstoss geben.
 
da nicht angegeben wurde in welcher sprache und ich mich nicht durch 200 seiten durchlese.
der c# ansatz.


static void Main(string[] args)
{
DateTime geburtstag = new DateTime(1984,3,27);
DateTime datum = new DateTime(2012,4,15);
int diff = geburtstag.DayOfYear - datum.DayOfYear;

if (diff >= -14 && diff <= 5)
{
Console.WriteLine("Geburtstag in {0} Tagen", diff);
}
else Console.WriteLine("Ausserhalb des Bereichs, es sind noch {0} Tage", diff);
}
 
Zuletzt bearbeitet:
Nun ja. Das Datum rechnen ist nicht so einfach.

Für mein Beispiel geht das so.

Aber es müssen Monats und auch Jahressprünge mit berücksichtigt werden.

Sobald der Kunde in einem anderen Monat Geburtstag hat, reicht diese Berechnung nicht mehr aus.

Beispiel: Kunde hat am 28.12.1980 Geburtstag und heute ist der 10.1.2013.

Damit wäre dann das Ergebnis mit deiner Formel +17

Dass ist also falsch.
 
Zuletzt bearbeitet:
probier meinen ansatz.

bei mir ist das ergebnis für dein letztgenanntes beispiel 353 tage.
 
Ok. Du hast nochmals editiert.

Aber 353 wäre ja auch nicht das gewünschte Ergebnis.
 
right, bei nem jahreswechsel gibts ein problem.

so:


DateTime geburtstag = new DateTime(1984,12,31);
DateTime datum = new DateTime(2012,12,28);
int diff = geburtstag.DayOfYear - datum.DayOfYear;
int diff2 = diff - 366;

if (geburtstag.Month == 12 && datum.Month != 12)
{
if (diff2 >= -14 && diff2 <= 7)
{
Console.WriteLine("Geburtstag in {0} Tagen", diff2);
}
}
else if (diff >= -14 && diff <= 7)
{
Console.WriteLine("Geburtstag in {0} Tagen", diff);
}


es gibt aber bestimmt elegantere möglichkeiten. so würds ich auf die schnelle machen.
 
Zuletzt bearbeitet:
@MichaelH.
Ich bin mir nicht ganz sicher ob ich richtig verstanden habe was du willst, aber ich hab mal auf die Schnelle was gebastelt:
Code:
public static int GetMinDifferenceFromToday(DateTime date)
{
    DateTime d1 = new DateTime(DateTime.Today.Year, date.Month, date.Day);
    DateTime d2 = new DateTime(DateTime.Today.Year - 1, date.Month, date.Day);

    TimeSpan t1 = d1 - DateTime.Today;
    TimeSpan t2 = DateTime.Today - d2;

    return Math.Abs(t1.Days) < Math.Abs(t2.Days) ? t1.Days : t2.Days;
}
 

Ähnliche Themen

Zurück
Oben