ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 29.05.2000

Diese Seite wurde zuletzt aktualisiert am 29.05.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Differenzierte Zeitdifferenzen

Zurück...


Anzeige

(-hg) mailto:hg_datediffvalues@aboutvb.de

Eine Differenz zwischen zwei Datumswerten (des Datentyps Date) können Sie auf zweierlei Wegen berechnen. Zum einen können Sie die DateDiff-Funktion verwenden. Diese liefert jedoch den Differenzwert nur ein einer einzigen wählbaren Einheit. Sie können so die Differenz nur entweder in Sekunden, oder in Minuten, oder in Stunden, oder in Tagen usw. erhalten. Die Umrechnerei, etwa aus der Gesamtzahl der Sekunden in Minuten, Stunden, Tage usw. bleibt Ihnen selbst vorbehalten.

Zum anderen können Sie den einen Wert vom anderen abziehen und erhalten so einen neuen Datumswert. Als Datum ist dieser augenscheinlich wertlos - die Differenz zwischen heute und gestern ergäbe als Datum den 31.12.1899.

Ein Datumswert ist aber eigentlich nichts anderes ist als eine Fließkommazahl, deren ganzzahliger Anteil die Anzahl der Tage seit dem 30.12.1899 (dem als 0 definiertierten Tag) und deren Nachkommaanteil die Uhrzeit enthält. Der Wert 1 als ganzzahliger Anteil der Differenz zwischen heute und gestern entspricht damit durchaus der tatsächlichen Differenz in Tagen. Eine Differenz unter Berücksichtigung der Uhrzeit wird ebenso korrekt ermittelt. Die Differenz der Stunden, Minuten und Sekunden finden sich im Nachkommaanteil wieder. Und bei einer Differenz größer als 24 Stunden kommt wieder der entsprechende Tageswert als ganzzahliger Anteil dazu.

Eine einfache Prozedur, die die Differenz zwischen zwei Datumswerten ermittelt und die jeweiligen Anteile an Tagen, Stunden, Minuten und Sekunden zurückgibt, könnte folgendermaßen aussehen (Date1 ist das ältere, Date2 das jüngere Datum):

Private Sub DateDiffValues(Date1 As Date, Date2 As Date, _
 Days As Long, Hours As Long, Minutes As Long, Seconds As Long)
  Dim nDiffDate As Date
  
  nDiffDate = Date2 - Date1
  Days = Fix(CDbl(nDiffDate))
  Hours = Hour(nDiffDate)
  Minutes = Minute(nDiffDate)
  Seconds = Second(nDiffDate)
End Sub

Soweit scheint diese Funktion ihre Aufgabe recht ordentlich zu erfüllen. Wenn Sie allerdings der Wert in Tagen nicht interessiert, und Sie als größte Einheit den Wert in Stunden erhalten möchten, müssen Sie den Tageswert wieder selbst in Stunden umrechnen und zum Stundenwert addieren. Oder wenn Sie nur Minuten und Sekunden interessieren, haben Sie noch mehr Rechnerei am Hals.

Etwas praktischer ist die folgende Funktion DateDiffValuesEx. Auch ihr übergeben Sie wieder zunächst die zwei Datumswerte (oder nur den älteren, als jüngerer wird dann automatisch der aktuelle Datumswert über die VB-Funktion Now ermittelt), zwischen den die Differenz ermittelt werden soll. Darüber hinaus jedoch übergeben Sie als optionale Parameter nur diejenigen, die Sie tatsächlich interessieren.

Public Function DateDiffValuesEx(Date1 As Date, _
 Optional Date2 As Variant, Optional Weeks As Variant, _
 Optional Days As Variant, Optional Hours As Variant, _
 Optional Minutes As Variant, Optional Seconds As Variant) _
 As Long

  Dim nDateDiff As Long
  
  If IsMissing(Date2) Then
    nDateDiff = DateDiff("s", Date1, Now)
  Else
    nDateDiff = DateDiff("s", Date1, Date2)
  End If
  If Not IsMissing(Weeks) Then
    Weeks = nDateDiff \ 604800
    nDateDiff = nDateDiff Mod 604800
  End If
  If Not IsMissing(Days) Then
    Days = nDateDiff \ 86400
    nDateDiff = nDateDiff Mod 86400
  End If
  If Not IsMissing(Hours) Then
    Hours = nDateDiff \ 3600
    nDateDiff = nDateDiff Mod 3600
  End If
  If Not IsMissing(Minutes) Then
    Minutes = nDateDiff \ 60
    nDateDiff = nDateDiff Mod 60
  End If
  If IsMissing(Seconds) Then
    DateDiffValuesEx = nDateDiff
  Else
    Seconds = nDateDiff
  End If
End Function

Eine Differenz in Stunden, Minuten und Sekunden erhalten Sie also folgendermaßen:

Dim DateOlder As Date
Dim DateNewer As Date
Dim Hours As Long
Dim Minutes As Long
Dim Seconds As Long

DateOlder = "25.04.2000 17:25:32"
DateNewer = "20.05.2000 09:48:13"
DateDiffValuesEx DateOlder, DateNewer, , , Hours, Minutes, Seconds

Oder in Minuten und Sekunden bis zum aktuellen Zeitpunkt:

Dim DateOld As Date
Dim Minutes As Long
Dim Seconds As Long

DateOld = "29.05.2000 07:25:32"
DateDiffValuesEx DateOld, , , , , Minutes, Seconds

Wenn Sie die Differenz lediglich in Sekunden erhalten möchten, brauchen Sie außer den zu übergebenden Datumswerten (bzw. nur dem ersten für die Differenz bis zum aktuellen Zeitpunkt) keinen der Rückgabe-Parameter zu belegen. Der Funktionsrückgabewert enthält immer die verbleibenden Sekunden.


Modul modDateDiffValues (modDateDiffValues.bas - ca. 1,5 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer