venerdì 30 novembre 2007

ASP - Come verificare se un'anno è bisestile

In questo post presenterò il codice ASP che ci permette di verificare se un anno è bisestile o no.

Lo script è composto da una funzione principale, cuore del calcolo, e da un "blocco if" con il quale si intercetta la risposta.

E' utile fare in questo modo ( e non con una sola semplice funzione) per poter verificare anche se sono avvenuti errori nel calcolo.

Il codice è il seguente:


<%
Function annobisestile(data_num)
on error resume next
if not(isempty(data_num) or isnull(data_num) or len(trim(data_num))=0) then 'se c'è un parametro
if err<>0 then annobisestile=vbnull
if isnumeric(data_num) then 'se è un anno
if data_num<>0 then 'se è diverso da zero
anno=abs(data_num) 'anni negativi vengono considerati positivi
end if
elseif isdate(data_num) then' se è una data
anno=year(data_num) 'estrapolo l'anno
else 'se non è né una data né un anno
annobisestile=vbNull
end if
if err<>0 then annobisestile=vbnull

'/***********************************************************************************/
'/ Un anno è bisestile se è divisible per 4 ma NON per 100. Però è bisestile */
'/ se è divisibile per 400 */
'/***********************************************************************************/

'controllo se è bisestile
if ( ( ( anno mod 4 = 0) and ( anno mod 100 <> 0 ) ) or ( anno mod 400 = 0) )then
annobisestile=true
else
annobisestile=false
end if
if err<>0 then annobisestile=vbnull
else 'se non c'è nessun parametro
annobisestile=vbNull
end if
end function

strtest=2007
if annobisestile(strtest)=true then
'qua il codice che volete se l'anno è bisestile
elseif annobisestile(strtest)=vbnull then
'qua il codice che volete se c'è stato un errore
' o non è stato passato un parametro corretto
else
'qua il codice che volete se l'anno NON è bisestile

end if
%>


Se siete sicuri di passare alla funzione un parametro corretto, ossia un numero corrispondente ad un anno (maggiore di 0 e positivo) o una data in un formato corretto allora potete semplificare il "blocco if" in questo modo:


strtest=2007
if annobisestile(strtest) then
'qua il codice che volete se l'anno è bisestile
else
'qua il codice che volete se l'anno NON è bisestile
end if


Spero di essere stato chiaro! Se volete scaricare lo script questo è il link.
Nello script dello Zip non è presente il secondo blocco if, quello semplice.

Se avete domande, critiche e/o suggerimenti o semplicemente volete delucidazioni non esitate a contattarmi

Alla prossima!


Aggiornamento:

Quella mostrata sopra è una "funzione didattica" :D . aggiorno questo post per metterne un'altra molto meno complessa che fa la stessa cosa. La funzione è questa:


<%
function
annobisestile(anno)
    dim miadata
    if isdate(anno) then
        miadata="28/02/" & year(anno)
    else
        miadata="28/02/" & anno
    end if
    miadata=dateadd("d",1,miadata)
    if day(miadata)=29 then
       
annobisestile=true
    else
       
annobisestile=false
    end if
end function
%>

Attenzione però che in quest'ultima funzione non ho messo un controllo errori quindi devi essere sicuro di passare come valore un anno o una data!
Il resto è uguale. La funzione restituisce il valore booleano true se l'anno è bisestile o false se non lo è.

Nello zippo sopra lincato NON è inclusa quest'ultima funzione!