| |
|
|
- Página 1 - |
|
Walter | ¡Hola,
Hintergrund: Yo parse una Texto después de Datumswerten (en DB-Formato) y errechne de zwei Datumswerten el Tages-Differenz .
Freeprofan 095, Prfrun32.exe
Conjunto("ErrorLevel", 0)
declarar Datum1$,Datum2$,Diff%
'Eingelesene Werte zB
Datum1$=20161001
Datum2$=20161030
'+----------------------------------------------
Proc DeltaTage_DB_Format
'+----------------------------------------------
'Berechnet Anzahl de Tagen zwischen 2 Datumswerten
'Parámetro: Anfang, Ende en Datenbankformat
'Rückgabe Differenz Tage Integer
Parámetros Von$,Bis$
Volver dt("DaysBetween", dt("setdate",DToC$(Von$)), dt("setdate",DToC$(Bis$)))
ENDPROC'DeltaTage_DB_Format
' Hauptprogramm
Diff% = DeltaTage_DB_Format(Datum1$,Datum2$)
messagebox(str$(diff%),"Differenz-Tage",0)
En Eingabe gültiger Datumswerte errechnet el Programa el Differenz. En fehlerhaftem Datumswert bricht "setdate" el Programa sin Möglichkeit uno Reacción de. Gibt lo el Möglichkeit, una Datum en gültig a überprüfen, bevor uno lo verwendet?
LG
Walter |
|
|
| |
|
|
|
« Dieser Contribución wurde como Solución gekennzeichnet. » |
|
Jörg Sellmeyer | Yo sería lo así hacer:
Conjunto("ErrorLevel", 0)
declarar Datum1$,Datum2$,Diff%
'Eingelesene Werte zB
Datum1$=20161001
Datum2$=20161030
'+----------------------------------------------
Proc DeltaTage_DB_Format
'+----------------------------------------------
'Berechnet Anzahl de Tagen zwischen 2 Datumswerten
'Parámetro: Anfang, Ende en Datenbankformat
'Rückgabe Differenz Tage Integer
Conjunto("ErrorLevel", -1)
Parámetros Von$,Bis$
Var Valor$ = dt("DaysBetween", dt("setdate",DToC$(Von$)), dt("setdate",DToC$(Bis$)))
'imprimir %error
If %Error > 0
'imprimir "Fehler"
Valor$ = "Fehler"
EndIf
Conjunto("ErrorLevel", 0)
Volver Valor$
ENDPROC'DeltaTage_DB_Format
' Hauptprogramm
Var Ergebnis$ = DeltaTage_DB_Format(Datum1$,Datum2$)
If Ergebnis$ = "Fehler"
'...
Más
diff% = Val(Ergebnis$)
'Hier entonces el weitere Behandlung
EndIf
Waitinput
|
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 03.11.2016 ▲ |
|
|
|
|
|
Walter | Oho - trickreich! Herzlichen Dank! Walter |
|
|
| |
|
|
|
Michael W. | algunos Routinen de MwDate
Proc MakeFullYear
' Füllt el (eventuell) vergessene Jahrhundert en.
' Y = MakeFullYear( Y )
Parámetros Y%
Declarar ThisCentury%, ThisCenturyRange%
ThisCentury% = 20
ThisCenturyRange% = 29'2000 - 2029, sonst 1930 - 1999
If Y% < 100
Casenote Between(ThisCenturyRange%,0,99) : ThisCenturyRange% = 29
Casenote Between(ThisCentury%,16,39) : ThisCentury% = Int(dt("GetYear",!now) / 100)
If Y% <= ThisCenturyRange%
' aktuelles Jahr
Y% = Y% + (ThisCentury% * 100)
Más
' Vorjahr
Y% = Y% + ((ThisCentury% - 1) * 100)
EndIf
EndIf
Volver Y%
ENDPROC
Proc LastDayInMonth
' Liefert el letzten Tag des Monats.
' Ultimo = LastDayInMonth( Mo, Y )
' -1 = Fehler
Parámetros Mo%, Y%
Declarar Leap%, Ultimo%, LDiM%[12]
LDiM%[0]=0:LDiM%[1]=31:LDiM%[2]=28:LDiM%[3]=31:LDiM%[4]=30:LDiM%[5]=31:LDiM%[6]=30
LDiM%[7]=31:LDiM%[8]=31:LDiM%[9]=30:LDiM%[10]=31:LDiM%[11]=30:LDiM%[12]=31
Ultimo% = -1
Case Y% < 100 : Y% = MakeFullYear(Y%)
Leap% = if((((Y% mod 4) = 0) and ((Y% mod 100) <> 0)) or ((Y% mod 400) = 0), 1, 0)' isLeapYear(Y)
Case Between(Mo%,1,12) : Ultimo% = LDiM%[Mo%] + if( (Mo% = 2) and (Leap% = 1), 1, 0)
Volver Ultimo%
ENDPROC
Proc isValidDate
' Prüft Tag,Monat,Jahr en Gültigkeit.
' ok = isValidDate(D,Mo,Y)
' 0 = invalid (falso)
' 1 = valid (true)
Parámetros D%,Mo%,Y%
Declarar ok%
ok% = 0
Case Between(Y%,1600,3999, Mo%,1,12, D%,1,(LastDayInMonth(Mo%,Y%))) : Inc ok%
Volver ok%
ENDPROC
Proc GetDayDB
' Zieht el Tag de una DB-Datum.
' Day = GetDayDB( DB )
Parámetros DB%
Volver DB% mod 100
ENDPROC
Proc GetMonthDB
' Zieht el Monat de una DB-Datum.
' Month = GetMonthDB( DB )
Parámetros DB%
Volver Int((DB% mod 10000) / 100
ENDPROC
Proc GetYearDB
' Zieht el Jahr de una DB-Datum.
' Year = GetYearDB( DB )
Parámetros DB%
Volver Int(DB% / 10000)
ENDPROC
Proc SetDB
' Erstellt de Tag,Monat,Jahr una DB-Datum con Gültigkeitsprüfung.
' DB = SetDB(D,Mo,Y)
' -1 = Fehler
Parámetros D%,Mo%,Y%
Declarar DB%
DB% = -1
Case Y% < 100 : Y% = MakeFullYear(Y%)
Case isValidDate(D%,Mo%,Y%) : DB% = Y% * 10000 + Mo% * 100 + D%
Volver DB%
ENDPROC
|
|
|
| |
|
|
|
Walter | Sí, el son muy nützliche Routinen! Posesiones mich sonst wegen el no bastante einfachen Verwendung el neuen Datumsfunktionen zusätzlich con Características de prfdat32.dll bastante bien beholfen. Gracias! Walter |
|
|
| |
|
|