vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Datum/Zeit und Timer · Datums- und Zeitfunktionen   |   VB-Versionen: VB616.10.03
Zeitspanne zwischen zwei Datums-Werten berechnen

Diesmal zeigen wir Ihnen, wie man die vergangene Zeit zwischen zwei Datums-Angaben ermittelt - Jahre, Monate und Tage.

Autor:   Guido EisenbeisBewertung:  Views:  34.228 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

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  Erklärung der DateDiff-Funktion sehr anschaulich beschrieben wird.

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:
"Sie sind heute 29 Jahre, 4 Monate und 22 Tage alt" (Kleines Wunschdenken von mir

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



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(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.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


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.