| |
|
|
- page 1 - |
|
Walter | Salut,
Hintergrund: je parse une Text pour Datumswerten (dans DB-Format) et errechne aus deux Datumswerten qui Tages-Differenz .
Freeprofan 095, Prfrun32.exe
Set("ErrorLevel", 0)
declare date1$,date2$,Diff%
'Eingelesene Werte zB
Datum1$=20161001
Datum2$=20161030
'+----------------------------------------------
Proc DeltaTage_DB_Format
'+----------------------------------------------
'Berechnet Anzahl de Tagen entre 2 Datumswerten
'paramètre: Anfang, Ende dans Datenbankformat
'Rückgabe Differenz Tage Integer
Paramètres de$,jusqu'à$
Retour dt("DaysBetween", dt("setdate",DToC$(de$)), dt("setdate",DToC$(jusqu'à$)))
endproc'DeltaTage_DB_Format
' Hauptprogramm
Diff% = DeltaTage_DB_Format(date1$,date2$)
messagebox(str$(diff%),"Differenz-Tage",0)
chez Eingabe gültiger Datumswerte errechnet cela Programme qui Differenz. chez fehlerhaftem Datumswert bricht "setdate" cela Programme sans Possibilité einer réaction ab. Gibt es qui Possibilité, un date sur gültig trop überprüfen, bevor on es verwendet?
LG
Walter |
|
|
| |
|
|
|
« cette Beitrag wurde comme Solution gekennzeichnet. » |
|
Jörg Sellmeyer | je serait es so faire:
Set("ErrorLevel", 0)
declare date1$,date2$,Diff%
'Eingelesene Werte zB
Datum1$=20161001
Datum2$=20161030
'+----------------------------------------------
Proc DeltaTage_DB_Format
'+----------------------------------------------
'Berechnet Anzahl de Tagen entre 2 Datumswerten
'paramètre: Anfang, Ende dans Datenbankformat
'Rückgabe Differenz Tage Integer
Set("ErrorLevel", -1)
Paramètres de$,jusqu'à$
Var Wert$ = dt("DaysBetween", dt("setdate",DToC$(de$)), dt("setdate",DToC$(jusqu'à$)))
'imprimer %error
Si %Error > 0
'imprimer "Fehler"
Wert$ = "Fehler"
EndIf
Set("ErrorLevel", 0)
Retour Wert$
endproc'DeltaTage_DB_Format
' Hauptprogramm
Var Ergebnis$ = DeltaTage_DB_Format(date1$,date2$)
Si Ergebnis$ = "Fehler"
'...
D'autre
diff% = Val(Ergebnis$)
'ici ensuite qui 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. | quelques Routinen aus MwDate
Proc MakeFullYear
' Füllt cela (eventuell) vergessene siècle sur.
' Y = MakeFullYear( Y )
Paramètres Y%
Déclarer ThisCentury%, ThisCenturyRange%
ThisCentury% = 20
ThisCenturyRange% = 29'2000 - 2029, sonst 1930 - 1999
Si Y% < 100
Casenote Between(ThisCenturyRange%,0,99) : ThisCenturyRange% = 29
Casenote Between(ThisCentury%,16,39) : ThisCentury% = Int(dt("GetYear",!now) / 100)
Si Y% <= ThisCenturyRange%
' aktuelles l'an
Y% = Y% + (ThisCentury% * 100)
D'autre
' Vorjahr
Y% = Y% + ((ThisCentury% - 1) * 100)
EndIf
EndIf
Retour Y%
ENDPROC
Proc LastDayInMonth
' Liefert den letzten journée des Monats.
' Ultimo = LastDayInMonth( Mo, Y )
' -1 = faute
Paramètres Mo%, Y%
Déclarer 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
Cas Y% < 100 : Y% = MakeFullYear(Y%)
Leap% = si((((Y% mod 4) = 0) and ((Y% mod 100) <> 0)) or ((Y% mod 400) = 0), 1, 0)' isLeapYear(Y)
Cas Between(Mo%,1,12) : Ultimo% = LDiM%[Mo%] + si( (Mo% = 2) and (Leap% = 1), 1, 0)
Retour Ultimo%
ENDPROC
Proc isValidDate
' Prüft journée,mois,l'an sur Gültigkeit.
' ok = isValidDate(D,Mo,Y)
' 0 = invalid (faux)
' 1 = valid (vrai)
Paramètres D%,Mo%,Y%
Déclarer ok%
ok% = 0
Cas Between(Y%,1600,3999, Mo%,1,12, D%,1,(LastDayInMonth(Mo%,Y%))) : Inc ok%
Retour ok%
ENDPROC
Proc GetDayDB
' Zieht den journée aus einem DB-date.
' Day = GetDayDB( DB )
Paramètres DB%
Retour DB% mod 100
ENDPROC
Proc GetMonthDB
' Zieht den mois aus einem DB-date.
' Month = GetMonthDB( DB )
Paramètres DB%
Retour Int((DB% mod 10000) / 100
ENDPROC
Proc GetYearDB
' Zieht cela l'an aus einem DB-date.
' Year = GetYearDB( DB )
Paramètres DB%
Retour Int(DB% / 10000)
ENDPROC
Proc SetDB
' Erstellt aus journée,mois,l'an un DB-date avec Gültigkeitsprüfung.
' DB = SetDB(D,Mo,Y)
' -1 = faute
Paramètres D%,Mo%,Y%
Déclarer DB%
DB% = -1
Cas Y% < 100 : Y% = MakeFullYear(Y%)
Cas isValidDate(D%,Mo%,Y%) : DB% = Y% * 10000 + Mo% * 100 + D%
Retour DB%
ENDPROC
|
|
|
| |
|
|
|
Walter | oui, ce sont très nützliche Routinen! Habe mich sonst à cause de qui pas entier einfachen Verwendung qui neuen Datumsfunktionen zusätzlich avec Funktionen aus prfdat32.dll droite bien beholfen. merci! Walter |
|
|
| |
|
|