La gestione delle date in VBScript

di Luca Milan, in ASP - Scripting,

L'utilizzo delle date e del tempo in ASP è molto importante sia all'interno delle nostre istruzioni SQL sia nella progettazione di eventi programmati (Cookies, Expires, Email, Scadenza di record su database, ecc.).
ASP e VBScript, offrono potenti funzioni di manipolazione e formattazione che ci mettono in grado di controllare in modo flessibile e rapido le variabili associate al tempo.
Le date sono memorizzate come parte di un numero reale. I valori a sinistra del separatore decimale rappresentano la data, quelli a destra l'orario. I numeri negativi rappresentano le date precedenti al 30 dicembre 1899
Per cominciare vediamo una breve panoramica di semplici esempi, per renderci conto dell'output restituito:

Visualizza l'ora nel formato 12hr:
Codice:  <%= time %>
Output HTML:  4:57:45 AM
Visualizza la data e l'ora in 12hr format:
Codice:  <%= now %>
Output HTML:  6/06/99 4:57:45 AM
Visualizza giorno, mese, anno, in formato esteso
Codice:  <% Response.Write(FormatDateTime(Now(),1) & " " )%>
Output HTML:  Tuesday, April 20, 1999
Visualizza solo la data nel formato breve
Codice:  <% Response.Write(FormatDateTime(Now(),2) & " " )%>
Output HTML:  6/06/99
Visualizza l'ora nel formato 12hr
Codice:  <% Response.Write(FormatDateTime(Now(),3) & " " )%>
Output HTML:  4:57:45 AM

Visualizza l'ora nel formato 24hr:
Codice:  <% Response.Write(FormatDateTime(Now(),4) & " " )%>
Output HTML:  04:54
Visualizza il nome del mese corrente
Codice:  <%=MonthName(Month(Date))%>
Output HTML:  April
Visualizza il numero del giorno della settimana corrente:
Codice:  <%=WeekDay(Date)%>
Output HTML:  3
Visualizza il numero sul calendario del giorno corrente:
Codice:  <%=Day(Date)%>
Output HTML:  20
Visualizza l'anno corrente:
Codice:  <%=Year(Date)%>
Output HTML:  1999

Avete potuto vedere una breve rassegna dei differenti modi di esprimere ora e data in ASP con l'utilizzo della funzione FormatDateTime() . Questa introduzione ci permette di introdurre il concetto di manipolazione della data o dell'ora, che avviene attraverso una buone dose di fantasia e l'uso di funzioni VBScript di un certo interesse:
Dateadd(), Datediff(), Datepart(), Datevalue(), Dateserial().

Utilizzando Dateadd() possiamo calcolare il tempo nel futuro, ad esempio tra 200 ore, ecco il codice:

<%
'Calcoliamo l'ora corrente
Adesso = FormatDateTime(Now,0)
'Calcoliamo il nuovo tempo tra X(200) ore
Dopo = DateAdd(">h",200,Adesso)
%>
<% Response.Write(Dopo)%>

Output HTML: Tra 200 ore sarà il 6/21/99 19:17:12 PM

Vi chiederete quale potrebbe essere l'utilità di una simile routine, pensate ad esempio di voler dare una scadenza, un expires, ad un record immesso in un database, questo potrebbe essere un semplice modo per calcolarne la data, magari facendo interagire l'utente che potrebbe assegnare attraverso un input il valore della stessa.

Se volessimo visualizzare una parte di una data, ci dovremmo rivolgere ad una funzione particolare Datepart() :

Function TrovaTrimestre(LaData)
      TrovaTrimestre   = DatePart("q", LaData)
End Function

Ecco i possili valori per l'estrazione di una parte della data:

Settaggi Descrizione
yyyy Year
q Quarter
m Month
y Day of Year
d Day
w Weekday
ww Week of Year
h Hour
n Minute
s Second

Combinando Datepart() e Dateadd() possiamo sapere in quale giorno del mese di giugno saremo tra 10 anni:

Codice: Response.Write("Datepart("w", DateAdd("yyyy", 10, "10/06/99"))")
Output HTML: 4

Vediamo ad esempio l'utilizzo delle funzioni date di VBScript per calcolare quanti giorni mancano al pagamento dello stipendio, che avviene generalmente il 27 di ogni mese.

Dim GiorniMancanti, GiornoPagamento

if Day(Now)< 27 then
  GiornoPagamento   = DateSerial (Year(Now),Month(Now),27)
elseif Day(Now)< Day(DateSerial(Year(Now),Month(Now)+1,1-1))
   GiornoPagamento   = DateSerial(Year(Now),Month(Now)+1,1-1)
else
  GiornoPagamento   = DateSerial(Year(Now),Month(Now)+1,27)
end if

GiorniMancanti = DateDiff ("d",Now,GiornoPagamento)

In questo codice abbiamo usato due funzioni nuove, Dateserial() e Datediff() , ben documentate sull'help del VBScript. Ma per rendersi conto delle potenza di funzione come Dateserial() proviamo a spiegarne l'uso.
Essa viene principalmente utilizzata per creare una data quando abbiamo l'anno, il mese ed il giorno:

MiaData = DateSerial(1999,6,2)

così facendo la variabile MiaData sarà settata con "6/2/1998", ma la potenza e flessibilità di questa funzione si espande notevolmente quando possiamo fare riferimento in sesnso assoluto alle date, ad esempio:

MiaData = DateSerial(1999-1,6-2,1-1)

In questo caso setto la variabile MiaData ad una data pari a: l'anno prima del 1999, a due mesi prima del mese di giugno e al giorno precedente a quello indicato:

OutputHTML: 31/03/98

Calcolo l'intervallo tra due date, dove l'intervallo può avere diversi settaggi i quali corrispondono a quelli visti precedentemente per Datepart() .

L'utilizzo più semplice che possiamo fare della manipolazione delle date con ASP e VB è ad esempio:

  • Gestione delle sottoscrizione a newsgroups.
  • Scadenze a tempi prefissati di password e username nella gestione di profili utenti in forum e comunità virtuali.
  • Schedulazione di eventi in mailing list (del tipo ogni 15 del mese ti arrivano le novità via email).
  • Expires di pagine ASP e Cookies.
  • Temporaneità limitata nell'utilizzo di determinati servizi online a pagamento, ad esempio possiamo fornire un servizio free per i primi 10 giorni dalla sottoscrizione dopichè si paga.

Questi spunti sono solo la punta di un iceberg e solo la fantasia può limitare l'utilizzo della manipolazione delle date via ASP e VB.
Nella prossima puntata parleremo della gestione date via SQL e in quale modo sia possibile automatizzare e schedulare eventi quali in backup di tabelle di database oppure la cancellazione di record postdatati.

Contenuti dell'articolo

    Commenti

    Visualizza/aggiungi commenti

    | Condividi su: Twitter, Facebook, LinkedIn

    Per inserire un commento, devi avere un account.

    Fai il login e torna a questa pagina, oppure registrati alla nostra community.

    Approfondimenti

    Nessuna risorsa collegata