Newsgroup: it.comp.lang.visual-basic
Titolo: CERCO FUNZIONE IN VB

Ciao sto cercando una funzione Visual Basic, che mi dica quanti giorni ha un
mese.
Ad esempio voglio che questa funzione mi dica che Gennaio ha 31 giorni ecc,
ecc.
Chi mi puň aiutare?
Grazie Ciao
Kratos

 ha scritto nel messaggio
news:984oie$71j$1...@pluto.sm.dsi.unimi.it...

Ti suggerisco l'algoritmo. Supponiamo che tu voglia calcolare i giorni di
Settembre 2001. Assegni ad una variabile Data il valore 1 Ottobre 2001 e poi
sottrai 1. La funzione Day ti restituira' il valore cercato.

'ecco fatto:
Public Function GiorniDelMese(MeseAnno)
    Dim gma, m, g
    gma = "1/" & MeseAnno
    m = Month(gma)
    Do
        g = g + 1
        gma = CDate(gma) + 1
    Loop Until Month(gma) <> m
    GiorniDelMese = g
End Function

Function GiorniDelMese(data As Date) As Byte
  Dim Data1 As Date
  Data1 = DateSerial(Year(data), Month(data), 1)
  GiorniDelMese = Day(DateSerial(Year(Data1 + 31), Month(Data1 + 31), 1) -
1)
End Function

Questo e' uno in gara con se stesso, chi vincera'?
Si direbbe la qualita' della soluzione.
Salve
                Dbg
Andrea Bruno ha scritto nel messaggio ...

 ha scritto nel messaggio
news:%psp6.112333$Y93.2...@news.infostrada.it...

E se facessimo un concorso? :)))))))))))))))))))
Function LastDayOfMonth(dtData As Date) As Byte
  LastDayOfMonth = Day(DateSerial(Year(dtData), Month(dtData) + 1, 0))
End Function

aghhhh, qui non si fa tempo a mettere il becco che arriva subito una
risposta con allegata soluzione della soluzione della soluzione .....
Salve
                Dbg
P.S. Al posto di byte usa pure integer, che tanto non si risparmia un
pifferro, tanto c'e' sta' il disallineamento dei dati.
Giorgio De Lellis ha scritto nel messaggio ...


 Chi mi può aiutare?
Quin ho visto diverse soluzioni, alcune mi hanno pure lasciato un po
perplesso.
Io allora propongo la mia: (la scrivo al volo)
' Ricavare quanti giorni ha un mese in un punto temporale precisato
' (febbraio cambia il Nr dei giorni in funzione del punto temporale
considerato)
function NrGgMese( byval dt as Date )
    dim dt2 as date
    dt = dateserial( year(dt), month(dt),1) ' mi posiziono a inizio mese
    dt2 = DateAdd("m",1,dt)    ' vado avanti di un mese
    NrGgMese = datediff( "d",dt,dt2) ' vedo quanti giorni di differenza ci
sono
end function
(ps: non ricordo se è DateDiff o DateDif :-/ )
 /\/\/\/\/\/\/\/\/\/
| Una iniziativa a livello di questo NG:
| Partecipa alla stesura di progetti VB sviluppati in team, informati sul
Sito Comune
| sezione Leonardo.  Io partecipo al progetto Data Raptor, alleati con noi.
 \/\/\/\/\/\/\/\/\/\
Ciao
Ettore Maronese, il Mes
http://www.maronese.com/mes
Sito Comune di questo NG
http://www.murialdo.it/it_lang_vb


Oppure:(trenta giorni ha novembre....)
Function NrGgMese(byval dt as Date)
    dim m as integer
    m=month(dt)
    select case m
        case 2: m=28-((year(dt) mod 4)=0)
        case 4,6,9,11: m=30
        case else: m=31
    end select
    NrgGgMese=m
end function

 wrote in message
tJIp6.124431$Y93.3...@news.infostrada.it...

NO!!!
Non è cosi' facile!! La regola è + complessa.
Se ricordo bene è qualcosa di simile:
Ogni 4 anni è bisestile,
Ogni 100 Anni NON è bisestile
OGNI 200 è Bisestile
 /\/\/\/\/\/\/\/\/\/
| Una iniziativa a livello di questo NG:
| Partecipa alla stesura di progetti VB sviluppati in team, informati sul
Sito Comune
| sezione Leonardo.  Io partecipo al progetto Data Raptor, alleati con noi.
 \/\/\/\/\/\/\/\/\/\
Ciao
Ettore Maronese, il Mes
http://www.maronese.com/mes
Sito Comune di questo NG
http://www.murialdo.it/it_lang_vb

OGNI 200 è Bisestile
  Ogni 400 anni per la precisione, visto che gli anni secolari sono
bisestili solo se divisibili per 400.
  Ciao :-)
  Massimo
  Nell'indirizzo, inserire una "h" tra la "t" e la "u"
  In the address, insert an "h" between the "t" and the "u"

 ha scritto nel messaggio
news:984oie$71j$1...@pluto.sm.dsi.unimi.it...


 bisestili solo se divisibili per 400.
Grazie, il dobbio lo avevo appunto su quel 200/400.
quindi ricapitolando:
Ogni 4 anni è bisestile,
Ogni 100 Anni NON è bisestile
OGNI 400 è Bisestile


 OGNI 200 è Bisestile
Perfezioniamo:
 Function NrGgMese(byval dt as Date)
     dim m as integer, anno as integer
     m=month(dt)
     anno=year(dt)
     select case m
         case 2: m=28-((anno mod 400<>0) and ((anno mod 4)=0)) or (anno mod
400=0))
