version=1.6.0 vdate=21.06.2016 fname=dateinterval.cls ns=%NAMESPACE% fpath=/vba/classes/date ====== [VBA] DateInterval ====== ==Version %%version%% %%vdate%%== >//Das Modul hat versteckte Attribute. Damit diese aktiv übernommen werden reicht es nicht aus, den Code in ein neues Modul zu kopieren. Man muss das Modul aus der Datei nach VBA importieren.// >{{popup>:vba:vba_importfile.png|Bild zum Import}} {{..%%fname%%|Download %%fname%% (V-%%version%%)}} %%DateInterval%% stellt ein Abstand zwieschen 2 Datums dar. Als Grundlage dient [[http://en.wikipedia.org/wiki/Iso8601#Durations|ISO8601 Duration]] Die Klasse [[vba:classes:date:datetime:index]] muss ebenfalls installiert sein: {{:vba:classes:date:datetime.cls|}} ===== Methoden===== *[[#construct|construct()]]: Initialisiert ein Objekt *[[#instance|instance()]]: Instanziert & Initialisiert ein Objekt *[[#instancefromdatediff|instanceFromDateDiff()]]: Instanziert ein Objekt aus 2 Daten *[[#format|format()]]: Formatiert analog zu format() in VBA *[[#format2()|format2()]]: Ersetzt Patterns durch Werte ==== CONSTRUCT() ==== Public Function instance(ByVal iIntervalSpec As Variant) As DateInterval Initialisiert eine [[.:index|DateIteratorInstanz]] mit einer [[#iIntervalSpec|IntervalSpec]] oder Anzahl Tage === Parameters === == iIntervalSpec == Eine %%IntervalSpec%% nach [[http://en.wikipedia.org/wiki/Iso8601#Durations|ISO8601 Duration]] oder eine Zahl. Das währen dann Anzahlt Tage === Return === Eine Referenz auf die aktuelle [[.:index]]-Instanz === Beispiel === Dim di As New DateInterval di.construct ("P3DT5H") ==== INSTANCE()==== Public Function instance(ByVal iIntervalSpec As Variant) As DateInterval Erstellt eine neue Instanz eines [[.:index|DateIterators]] aus einer [[#iIntervalSpec|IntervalSpec]] oder aus Anzahl Tage Diese Funktion hat die Attributzeile 'Attribute item.VB_UserMemId = 0'. Ergo ist es die Standartfunktion der Klasse === Parameters === == iIntervalSpec == Eine %%IntervalSpec%% nach [[http://en.wikipedia.org/wiki/Iso8601#Durations|ISO8601 Duration]] oder eine Zahl. Das währen dann Anzahlt Tage === Return === Eine neue Instanz der [[.:index]]-Klasse === Beispiele === Dim di As DateInterval 'Einmal über Funktionsaufruf mit einer IntervalSpec Set di = DateInterval.instance("P3D") 'Und dasselbe mit Anzahl Tage. Da instance() die Standartfunktion ist, muss sie nicht explizit angegeben werden Set di = DateInterval(3) ==== INSTANCEFROMDATEDIFF() ==== Erstellt eine Instance von einem [[.:index|DateIterar]] aus der Differenz von 2 Datum Public Function instanceFromDateDiff( _ Optional ByRef iDate1 As Variant = Null, _ Optional ByRef iDate2 As Variant = Null, _ Optional ByVal iAbsolute As Boolean = False _ ) As DateInterval === Parameters === == iDate1 == Das erste Datum für die Differenz. Es kann sich dabei um ein VBA-Datum, ein Datumsstring oder ein [[..:datetime:index|DateTime-Objekt]] handeln == iDate2 == Das zweite Datum für die Differenz. Es kann sich dabei um ein VBA-Datum, ein Datumsstring oder ein [[..:datetime:index|DateTime-Objekt]] handeln == iAbsolute == Ein Flag mit dem man das Vorzeichen unterdrücken kann. Egal ob iDate1 oder iDate2 grösser ist, es wird immer eine positive DIfferenz sofern iAbsolute auf True steht. === Return === Eine neue Instanz der [[.:index]]-Klasse === Beispiel === Dim di As DateInterval Set di = DateInterval.instanceFromDateDiff(#8/1/2014 8:15:00 AM#, #9/1/2014 9:30:15 AM#) ==== format() ==== Formatiert ein Interval zu einem String. Formate analog zum VBA-Befehl format() Public Function format(ByVal iFormat As String) As String === Parameters === == iFormat == Das Ausgabeformat ^ Abk. ^ Beschreibung ^ | m | Monat ohne führende Null (1-12) | | mm | Monat mit führende Null (01-12) | | mx | Total Anzahl Monate ohne führende Null | | d | Tag ohne führende Null (1-31) | | dd | Tag mit führende Null (01-31) | | dx | Total Anzahl Tage ohne führende Null | | y | Einstelliges Jahr. Analog zu d wird es glösser geschrieben, wenn es mehr Zeichen hat | | yy | Zweistelliges Jahr | | yyyy | Vierstelliges Jahr | | h | Stunden ohne führende Null(0-24) | | hh | Stunden mit führende Null(00-24) | | hx | Total Anzahl Stunden ohne führende Null | | n | Minuten ohne führende Null(0-59) | | nn | Minuten mit führende Null(00-59) | | nx | Total Anzahl Minuten ohne führende Null | | s | Sekunden ohne führende Null(0-59) | | ss | Sekunden mit führende Null(00-59) | | sx | Total Anzahl Tage ohne führende Null | | r | Bei Muinus ein - | | R | Bei Minus ein -, bei Plus ein + | Mit \ kann ein Format maskiert werden. damit es nichtgeparst wird: m wird als Monat ausgegeben. \m wird zu "m" === Return === Ein formatierter String === Beispiel === Dim di As DateInterval Set di = DateInterval("P13Y4M1DT15H") Debug.Print di.format("\Y;: y, \M: m") '-> "Y: 13, M: 4" ==== format2() ==== Formatiert ein Interval zu einem String. Im Gegensatz zu format() werden die Formate als Pattern mitgegeben. Dadurch lassen sich Texte einfach parsen. Public Function format2(ByVal iFormat As String) As String === Parameters === == iFormat == Die Patterns sind analog zu iFormat bei format(). Jedoch müssen sie in {$..} geschrieben werden. === Return === Ein formatierter String === Beispiel === Dim di As DateInterval Set di = DateInterval("P13Y4M1DT15H") Debug.Print di.format2("Y: {$y}, M: {$m}") '-> "Y: 13, M: 4" ===== Properties ===== ***year** Die Jahre des Intervals ***month** ***day** ***hour** ***minute** ***second** ***sign** Das Vorzeichen des Interval. -1 oder 1 ***years** Anzahl Jahre insgesamt. Wird nur bei %%DateDIff%%() abgefüllt. Entspricht dem VBA.%%DateDiff%%('y', date1, date2) ***months** Dito für Monate ***days** Dito für Tage ***hours** Dito für Stunden ***minutes** Dito für Minuten ***seconds** Dito für Sekunden ***intervalSpec** Gibt den Interval als [[#intervalspec|IntervalSpec]] zurück: P[n]Y[n]M[n]DT[n]H[n]M[n]S ***intervalSpec2** [[#intervalspec|IntervalSpec]]in der Schreibweise: PYYYYMMDDThhmmss ***intervalSpec3** und P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss] ===== Code =====