Newsgroup: it.comp.lang.visual-basic
Titolo: Determinare l'ultimo giorno lavorativo del mese.

Salve
C'č qualche anima pia che mi puň aiutare ???
In un progetto in VB6 devo determinare, tra un'intervallo di due date, 
qual'č l'ultimo giorno lavorativo del mese.
Es. 1 :
Data inizio = 28/07/2005 Giovedě
Data fine = 03/08/2005 Mrcoledě
Ultimo giorno lavorativo del mese : 29/07/2005 Venerdě
Es. 2 :
Data inizio = 29/08/2005 Lunedě
Data fine = 02/09/2005 Venerdě
Ultimo giorno lavorativo del mese : 31/08/2005 Mercoledě
Grazie a chi mi da una mano 

 qual'č l'ultimo giorno lavorativo del mese.
Beh, facile.
Cerchi l'ultimo giorno del mese (e questo č banale, eventualmente cerca nei
vecchi post) e se č sabato ne togli 1, se domenica ne togli 2.
Ciao
--
Reporting tool: 
http://www.neodatatype.net

 Ultimo giorno lavorativo del mese : 31/08/2005 Mercoledì


 Ultimo giorno lavorativo del mese : 31/08/2005 Mercoledì



Guarda che è molto più semplice di come la fai.
E a prescindere da questo mi pare una buona occasione per ripristinare una
delle mie firme ;)
Ciao
--
Reporting tool: 
http://www.neodatatype.net
Qualunque mentecatto può scrivere codice che un computer possa capire.
I buoni programmatori scrivono codice che gli uomini possano capire.
[Martin Fowler]

 ha scritto nel messaggio
news:xysJe.54338$fm.35...@news4.tin.it...


 è la soluzione :P
No, tu hai frainteso :)
Te lo spiego meglio: la tua soluzione fa schifo ;) oltre a non garantire il
risultato.


[Fly]

E' sufficiente la data di fine come dato, in quanto l'ultimo giorno 
lavorativo e' sempre riferito al mese precedente.
Ecco una funzione che calcola l'ultimo giorno lavorativo del mese della 
data passata come parametro alla funzione stessa:
Private Function UltimoLavorativo(ByVal Today As Date) As Date
    Dim d As Date
    d = DateAdd("m", 1, Today)
    d = DateSerial(Year(d), Month(d), 1)
    If Weekday(d) = vbMonday Then
        d = DateAdd("d", -3, d)
    ElseIf Weekday(d) = vbSunday Then
        d = DateAdd("d", -2, d)
    Else
        d = DateAdd("d", -1, d)
    End If
    UltimoLavorativo = d
End Function
Nel tuo caso:
Se la data fine e' uguale all'ultimo giorno lavorativo del mese, allora 
prendi la data fine, altrimenti prendi l'ultimo lavorativo del mese 
precedente.
Quindi:
detto "ultimo" l'ultimo giorno lavorativo, in base al tuo criterio:
If data_fine = UltimoLavorativo(data_fine) Then
    ultimo = data_fine
Else
    ultimo = UltimoLavorativo(DateAdd("m", -1, data_fine))
End If
hth,
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs
­/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs
­/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org
 

 ha scritto nel messaggio 
news:f77Je.52552$fm.33...@news4.tin.it...


 End Function
Questa prende già un senso :) e funziona (a occhio, ma di Lokar mi fido
:P ), a parte il DateAdd che non capisco.
Io l'avrei fatta ancora più semplice e più intuitiva (senza provare):
Private Function UltimoLavorativo(ByVal Month As Long, ByVal Year As Long)
As Date
    d = DateSerial(Year, Month + 1, 1)
    Select Case Weekday(d)
    case vbMonday
       d = d - 3
    case vbSunday
       d = d - 2
    case Else
       d = d - 1
    End Select
    UltimoLavorativo = d
End Function
Ciao


 End Function
Sicuramente molto piu' agile =) anche se avrei evitato di
chiamare i parametri con nomi di funzione ;)
Lokar
(*) Onde evitare la domanda, lo faccio per mantenere la
memorizzazione delle date costante su sistemi con diversi
formati internazionali. Un giochino analogo lo faccio anche
con i numeri con la virgola.


 anche con i numeri con la virgola.
Lokar