vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
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:     [ Jetzt bewerten ]Views:  34.226 
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

Dieser Tipp wurde bereits 34.226 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel