Es wird immer wieder gefragt: "Wie kann ich die Zeitspanne zwischen einem Datum 1 und einem Datum 2 anzeigen?" Beispielweise die vergangene Zeit zwischen meinem Geburtsdatum und heute? Das geht ganz einfach mit der DateDiff-Funktion, die schon im Tipp Die DateDiff-Funktion ermittelt die Zeitspanne aber leider nur in Jahren oder Monaten oder Tagen, z.B.: "Sie sind heute 14781 Tage alt." Viel schöner wäre es doch, wenn man die Zeitspanne in folgender Form zurückerhalten würde: Und das liefert folgender Code, den Sie in ein Modul einfügen müssen: Option Explicit ' in dieser Struktur wird die ' Zeitdifferenz gespeichert Public Type tDateDiff Years As Long Months As Long Days As Long End Type Public Function GetDateDiff(ByVal vDateBegin As Variant, _ ByVal vDateEnd As Variant) As tDateDiff ' Hilfsvariable Dim vTemp As Variant ' Datums-Werte nach Typ DATE umwandeln vDateBegin = CDate(vDateBegin) vDateEnd = CDate(vDateEnd) With GetDateDiff .Years = 0 .Months = 0 .Days = 0 ' Als erstes ermitteln wir die Jahre mit der DateDiff-Funktion. ' Da diese aber sagt, dass es 2 Jahre sind, egal ob wir z.B. ' von Januar 2000 bis Dezember 2002 eingeben oder ' von Dezember 2000 bis Januar 2002, ermitteln wir lieber die ' Monate. ' Beispiel: von "10.02.2001" bis "31.12.2003" .Months = DateDiff("m", vDateBegin, vDateEnd) ' Die Monate rechnen wir in Jahre plus Monate um, ' und erhalten als Ergebnis: 2 Jahre und 10 Monate .Years = Int(.Months / 12) .Months = .Months - (.Years * 12) ' Jetzt brauchen wir noch die Tage. Dazu addieren wir unsere ' ermittelten Jahre zum Anfagsdatum hinzu. ' Beispiel: "10.02.2001" + 2 Jahre = "10.02.2003" vTemp = DateAdd("yyyy", .Years, vDateBegin) ' und dann die ermittelten Monate: + 10 Monate = "10.12.2003" vTemp = DateAdd("m", .Months, vTemp) ' Wir berechnen die Tage zwischen dem so gewonnenen ' Hilfsdatum und dem EndDatum. ' von "10.12.2003" bis "31.12.2003" = 21 Tage. Stimmt. .Days = DateDiff("d", vTemp, vDateEnd) ' Ist die Tagesangabe des Anfangsdatum jedoch höher als die ' des Enddatums, z.B. "10.02.2001" bis "01.12.2003", so ' bekämen wir eine negative Anzahl-Tage heraus: -9 Tage ' Also ziehen wir einfach von der ermittelten Anzahl-Monate ' einen ab und wandeln ihn in Tage um. Schon stimmt wieder ' alles. If .Days < 0 Then .Months = .Months - 1 vTemp = DateAdd("yyyy", .Years, vDateBegin) vTemp = DateAdd("m", .Months, vTemp) .Days = DateDiff("d", vTemp, vDateEnd) End If ' 25.04.2014: Erweiterung ' Monatsangabe des Anfangsdatums höher als die des Enddatums If .Months < 0 Then .Months = 11 .Years = .Years - 1 End If End With End Function Anwendungsbeispiel: Dim vDateBegin As Variant Dim vDateEnd As Variant Dim tDiff As tDateDiff ' Anfangsdatum vDateBegin = "01.01.2001" ' Enddatum: Heute vDateEnd = Now ' Zeitspanne ermitteln und in Label-Felder ausgeben tDiff = GetDateDiff(vDateBegin, vDateEnd) With tDiff lblYears.Caption = CStr(.Years) lblMonths.Caption = CStr(.Months) lblDays.Caption = CStr(.Days) End With Dieser Tipp wurde bereits 34.748 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 ![]() ![]() Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats ![]() Dieter Otter sevTabStrip: Rechtsklick auf Reiter erkennen Eine Funktion, mit der sich prüfen lässt, auf welchen Tab-Reiter ein Mausklick erfolgte Neu! sevDTA 3.0 Pro ![]() SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |