Per quanto riguarda il problema della verifica della data (formato
dd/mm/yyyy) io ho risolto applicando questo codice, che ho inserito nel modulo di startup del programma. Questa è la funzione principale che replica l'analoga funzione php:
PUBLIC FUNCTION ControlloData(sData AS String) AS Boolean
DIM sDati AS String[]
DIM sValori AS Variant[]
DIM errore AS Boolean
sDati = Split(sData, "/")
IF sData LIKE "[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]" THEN
IF CheckDate(sDati[0], sDati[1], sDati[2]) = TRUE THEN
errore = FALSE
ELSE
errore = TRUE
ENDIF
ELSE
errore = TRUE
ENDIF
RETURN errore
END
ancora:
PRIVATE FUNCTION CheckDate(iGiorno AS Integer, iMese AS Integer, iAnno AS Integer) AS Boolean
DIM bValore AS Boolean
bValore = TRUE
IF iAnno > 0 AND iAnno < 32768 THEN
bValore = TRUE
'controllo del mese
IF iMese > 0 AND iMese < 13 THEN
bValore = TRUE
ELSE
bValore = FALSE
ENDIF
'controllo del numero dei giorni
IF iGiorno > NumeroGiorniDelMese(iMese, iAnno) THEN
bValore = FALSE
ELSE
bValore = TRUE
ENDIF
ELSE
bValore = FALSE
ENDIF
RETURN bValore
END
la funzione rettificata grazie a Leo:
PRIVATE FUNCTION AnnoBisestile(iAnno AS Integer) AS Boolean
DIM risultato AS Boolean
IF (((iAnno MOD 4 = 0) AND (iAnno MOD 100 <> 0)) OR iAnno MOD 400 = 0) THEN
risultato = TRUE
ELSE
risultato = FALSE
ENDIF
RETURN risultato
END
Questa funzione calcola il numero dei giorni del mese, rettificata rispetto alla prima versione grazie ai consigli di md9327..
PRIVATE FUNCTION NumeroGiorniDelMese(iMM AS Integer, iYYYY AS Integer) AS Integer
DIM risultato AS Integer
SELECT CASE iMM
CASE 1, 3, 5, 7, 8, 10, 12
risultato = 31
CASE 2
IF AnnoBisestile(iYYYY) = FALSE THEN
risultato = 28
ENDIF
IF AnnoBisestile(iYYYY) = TRUE THEN
risultato = 29
ENDIF
CASE 4, 6, 9, 11
risultato = 30
END SELECT
RETURN risultato
END
Un po' di teoria..
Un anno è bisestile se il suo numero è divisibile per 4, con l'eccezione che gli anni secolari (quelli divisibili per 100) sono bisestili solo se divisibili per 400. Sono cio è bisestili tutti gli anni la cui numerazione termina con le due cifre 04, 08, 12...fino a 6.Gli anni che terminano con 00 sono bisestili solo se l 'anno è divisibile per 400, cioè il 1600, il 2000, il 2400 eccetera i mesi dispari sono sempre di 31gg i pari di 30 (o 28 nel caso di Febbraio o 29 negli anni bisestili).
:-D Auguri!
ps. allego schermata della mia fatica del mese..