La cosa migliore mi è sembrata quella di implementare una funzione che restituisca una data a partire da una passsata come parametro insieme all'intervallo, in giorni, entro cui la data deve essere casualmente estrata (esempio 90gg per tre mesi).
Public Function getRandomDate(Start As Date, Intervallo As Integer) As Date
Il nostro amico, quindi, dovrà semplicemente invocare questa funzione passandogli l'ultima data scelta casualmente e l'intervallo di estrazione (cioè l'ampiezza del dominio di estrazione). Per verificare se il giorno è lavorativo basta sviluppare una seconda funzione che svolga proprio questo compito.
public function verificaLavorativo(target as Date) as Boolean.
Se il risultato è false, si deve ripetere l'estrazione.
Ecco l'implementazione delle due funzioni:
' Calcola la data casuale a partire dalla data Start all'interno di un intervallo ' di Intervallo giorni. ' Michele de Nittis ' 27/08/2008 Public Function getRandomDate(start As Date, intervallo As Integer) As Date Dim giorno As Integer ' calcolo del giorno casuale giorno = Rnd() * intervallo ' calcolo della nuova data getRandomDate = DateAdd("d", giorno, start) End Function
In pratica ho usato la funzione Rnd() per estrarre un numero casuale compreso tra 0 ed 1 e l'ho moltiplicato per il numero di giorni dell'intervallo (es. 90 se voglio un giorno scelto casualmente entro tre mesi). Ho aggiunto, quindi, il numero intero ottenuto (la conversione ad intero è implicita) alla data di partenza con la funzione DateAdd().
' Verifica se un giorno è lavorativo ' Michele de Nittis ' 27/08/2008 Public Function verificaLavorativo(target As Date) As Boolean ' Si deve verificare che non sia un sabato o una domenica If Weekday(target) = 1 Or Weekday(target) = 7 Then verificaLavorativo = False Exit Function End If ' altre verifiche del caso: esempio controllo che non sia Natale If (Month(target) = 12 And Day(target) = 25) Then verificaLavorativo = False Exit Function End If ' altre verifiche del caso: esempio controllo che non sia Ferragosto If (Month(target) = 8 And Day(target) = 15) Then verificaLavorativo = False Exit Function End If verificaLavorativo = True End Function
In questa funzione ho usato la funzione Weekday() per scoprire se il giorno è lavorativo o meno.
La funzione verificaLavorativo() può essere, quindi, modificata per aggiungere il controllo di altre festività (non sarà facile determinare pasquetta!).
Facile?
Potete divertirvi scaricando il seguente esempio di applicazione che sfrutta le due funzioni suddette.
[da 1 a 0 di 0 commenti] | Indietro