Gestione di date e timer

Transcript

Gestione di date e timer
Gestione di Date e Timer – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
JAVASCRIPT
GESTIONE DI DATE E TIMER
Dispensa corso DHTML a cura di Francesco Leonetti
[email protected]
Copyright 2002, EspertoWeb - www.espertoweb.it
1
Gestione di Date e Timer – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Oggetto Date()
Javascript mette a disposizione una classe di oggetto denominata “Date” che consente di
estrarre data e ora attuale del sistema.
Creando quindi un oggetto di tipo “Date” è possibile applicare ad esso le funzioni che
estraggono tali informazioni.
Ad esempio, scrivendo:
data = new Date();
si crea un oggetto di tipo Date, in questo esempio chiamato data (ma potete usare un
qualsiasi nome di variabile a piacere).
Ora è possibile applicare sull'oggetto le funzioni utili per avere le informazioni che ci servono.
Ecco le funzioni applicabili:
m =data.getMonth();
la variabile m contiene ora un numero compreso tra 0 e 11 corrispondente al mese attuale (0
per gennaio, sino a 11 per dicembre).
g=data.getDate();
la variabile g contiene ora il numero del giorno attuale (ad esempio 28, se oggi è 28 Febbraio
2002).
gs = data.getDay();
la variabile gs contiene ora un numero compreso tra 0 e 6 corrispondente al nome del giorno
settimanale (0 per domenica, 1 per lunedì sino a 6 per sabato);
a=data.getYear();
la variabile a contiene ora il numero dell’anno corrente (ad esempio: 2002).
Copyright 2002, EspertoWeb - www.espertoweb.it
2
Gestione di Date e Timer – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
A questo punto già si potrebbe ottenere una stringa rappresentante la data attuale.
Ad esempio con la seguente istruzione:
oggi = g+”/”+m+”/”+a;
se oggi fosse il 28 Febbraio 2002 la variabile oggi conterrebbe “28/2/2002”, mentre la
variabile gs (al momento non utilizzata) conterrebbe il valore “5” (corrispondente a giovedì ).
Il codice seguente dimostra un esempio di applicazione dell’oggetto di tipo Date().
(La pagina potete anche vederla su:
http://www.espertoweb.net/utenti/fleo/esempi/data.htm )
<html>
<head>
<title>FLEO: Visualizza Data</title>
<script language="JavaScript">
function data_oggi() {
var data = new Date();
var m= data.getMonth();
var g=data.getDate();
var gs = data.getDay();
var a=data.getYear();
var giorni_settimana = new Array();
giorni_settimana[0]="Domenica";
giorni_settimana[1]="Lunedì ";
giorni_settimana[2]="Martedì ";
giorni_settimana[3]="Mercoledì ";
giorni_settimana[4]="Giovedì ";
giorni_settimana[5]="Venerdì ";
giorni_settimana[6]="Sabato";
var mesi = new Array();
mesi[0]="Gennaio";
mesi[1]="Febbraio";
mesi[2]="Marzo";
mesi[3]="Aprile";
mesi[4]="Maggio";
mesi[5]="Giugno";
mesi[6]="Luglio";
mesi[7]="Agosto";
mesi[8]="Settembre";
mesi[9]="Ottobre";
mesi[10]="Novembre";
mesi[11]="Dicembre";
return giorni_settimana[gs]+", "+g+" "+mesi[m]+" "+a;
}
</script>
</head>
Copyright 2002, EspertoWeb - www.espertoweb.it
3
Gestione di Date e Timer – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
<body bgcolor=white>
<b>Ciao gentile visitatore o gentilissima visitatrice...</b><br>
Oggi è <b><script language=javascript>
document.write(data_oggi());
</script></b>
e sono felice di averti qui! :)
</body>
</html>
NOTA: Per costruire la stringa finale ho pensato di convertire il numero del mese nel nome
corrispondente (gennaio, febbraio, etc..) e analogamente anche il numero del giorno della
settimana nel corrispondente nome (lunedi', martedi', etc..). Per fare cio' ho prima creato due
"array", in uno ho assegnato per ogni indice il corrispondente nome del mese, un altro mi e'
servito per i nomi della settimana.
In questo modo per ottenere il nome del mese (analogamente del giorno della settimana) non
mi resta che individuare dal corrispondete array l’elemento che ha come numero lo stesso
numero del mese ottenuto dalle funzioni su "data".
Oltre al giorno, giorno della settimana, mese e anno, è possibile estrarre anche l’ora attuale
(ora, minuti, secondi).
hh = data.getHours();
la variabile hh contiene l’ora attuale (da 0 a 24);
mm = data.getMinutes();
la variabile mm contiene i minuti dell’ora attuale (da 0 a 59);
ss = data.getSeconds();
la variabile ss contiene i secondi dell’ora attuale (da 0 a 59).
A cosa può servirci ottenere l’ora attuale?
Potremmo pensare di inserire su una pagina web un orologio o un timer per cronometrare il
tempo di risposta ad un quiz. Ma l’orologio dovrà modificare l’ora visualizzata ogni secondo.
Avremmo quindi bisogno di una tecnica che ci consenta di modificare il contenuto di una
pagina web ad ogni intervallo di tempo predefinito. Esiste questo modo e lo vedremo in
seguito.
Copyright 2002, EspertoWeb - www.espertoweb.it
4
Gestione di Date e Timer – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
La pagina seguente invece dimostra un esempio di applicazione un po’ più frivolo. Una pagina
web che dice “buongiorno”, “buonpomeriggio”, “buonasera” o “buonanotte” in dipendenza
dell’ora in cui viene visitata. Il tutto ha senso solo se i visitatori sono nello stesso fuso orario
del server. Se un americano infatti venisse a visitare questa pagina in tarda mattinata gli
risulterebbe strano sentirsi accogliere con un “buonasera”. Ma l’esempio serve solo per
dimostrare la tecnica ;)
(La pagina potete anche vederla su:
http://www.espertoweb.net/utenti/fleo/esempi/benvenuto.htm )
<html>
<head>
<title>FLEO: Benvenuto</title>
<script language=javascript>
function saluto() {
var data = new Date();
var hh = data.getHours();
var ciao="";
if (hh>=0 && hh < 6) {
ciao = "Buonanotte";
};
if (hh>=6 && hh < 13) {
ciao = "Buongiorno";
};
if (hh>=13 && hh < 17) {
ciao = "Buonpomeriggio";
};
if (hh>=17 && hh < 23) {
ciao = "Buonasera";
};
return ciao;
};
</script>
</head>
<body bgcolor="white">
<script language=javascript>
document.write('<b>'+saluto()+'</b> gentile visitatore');
</script>
</body>
</html>
La funzione saluto() ottiene da un oggetto di tipo Date() l’ora attuale e restituisce un valore
(contenuto nella variabile ciao) assegnato in dipendenza di una serie di controlli sull’ora. Nel
Copyright 2002, EspertoWeb - www.espertoweb.it
5
Gestione di Date e Timer – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
corpo della pagina viene concatenato il valore restituito dalla funzione saluto() per costruire
una stringa di codice HTML da inserire nella pagina web.
Copyright 2002, EspertoWeb - www.espertoweb.it
6
Gestione di Date e Timer – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Gestione di timer in Javascript:
SetInterval(), clearInterval(), setTimeOut()
Vediamo ora come visualizzare su una pagina web continuamente data e ora attuale. Una sorta
di orologio permanente.
Abbiamo tutti gli elementi per estrarre le informazioni di data e ora. Il problema qui è dato dal
fatto che l’ora cambia ogni secondo. Ogni secondo quindi dovremmo modificare il testo
contenuto nella pagina web. Non possiamo certo pretendere che l’utente ricarichi la pagina
ogni secondo!
Ciò di cui abbiamo bisogno è una sorta di “timer” da far scattare ad ogni intervallo di tempo e
che ad ogni “scatto” faccia corrispondere l’esecuzione di una data azione o funzione (che in
questo caso dovrebbe essere: aggiorna l’orario).
Ebbene in Javascript esiste questo timer! Si chiama SetInterval() ed è di semplicissimo
utilizzo.
SetInterval() è un oggetto predefinito di Javascript, come Date() . Quando lo si richiama gli si
deve passare due parametri:
-
la funzione Javascript da richiamare;
-
l’intervallo di tempo (in millisecondi) in cui scattare e richiamare la funzione Javascript
definita come primo parametro.
SetInterval() restituisce un valore che può essere usato per identificare il timer.
Il timer quando viene attivato viene eseguito indefinitamente fintanto che si chiude la pagina o
si richiama la funzione clearInterval() passando come parametro l’identificativo del timer che si
vuole interrompere. Quando il timer è in esecuzione ad ogni scadenza dell’intervallo di tempo
specificato esegue l’azione o funzione associata.
Ad esempio:
timer_orologio = SetInterval(mostra_ora(),1000);
Viene attivato un timer identificato da “timer_orologio” il quale ogni 1000 millisecondi (quindi
ogni secondo) esegue la funzione mostra_ora().
Per interrompere il timer si eseguirà l’istruzione:
clearInterval(timer_orologio);
Copyright 2002, EspertoWeb - www.espertoweb.it
7
Gestione di Date e Timer – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Il codice seguente dimostra l’applicazione di questa tecnica:
(La pagina potete anche vederla su:
http://www.espertoweb.net/utenti/fleo/esempi/ora.htm )
<html>
<head>
<title>FLEO: Orologio</title>
Si definisce la variabile
timer_orologio all’inizio
FUORI dalle funzioni in
modo che essa sia
utilizzabile da ogni
funzione
<script language="JavaScript">
var timer_orologio;
function start_orologio() {
timer_orologio=setInterval("mostra_ora()",1000);
}
function stop_orologio() {
clearInterval(timer_orologio);
};
function mostra_ora() {
var data = new Date();
var hh = data.getHours();
var mm = data.getMinutes();
var ss = data.getSeconds();
La funzione stop_orologio
annulla il timer identificato
dalla variabile timer_orologio
passandola come parametro
a clearInterval.
var tempo = hh+":"+mm+":"+ss;
orologio.value=tempo;
}
</script>
</head>
Quando la pagina
viene caricata si
attiva l’orologio
<body onLoad="start_orologio()">
La funzione start_orologio crea un
timer con setInterval.
L’identificativo di tale timer viene
assegnato alla variabile
timer_orologio. SetInterval viene
chiamato in modo tale che ogni
1000 secondi esegua la funzione
mostra_ora.
Campo testo
identificato
come
“orologio”
L’ora attuale viene
assegnata al valore del
campo “orologio”
<INPUT type=text id=orologio size=10>
<INPUT type=button value="Stop" onclick="stop_orologio()">
<INPUT type=button value="Start" onclick="start_orologio()">
</body>
</html>
Copyright 2002, EspertoWeb - www.espertoweb.it
Due semplici pulsanti
che intercettano
l’evento “onClick” per
rispettivamente
attivare/disattivare il
timer.
8
Gestione di Date e Timer – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
SetTimeout()
La funzione setTimeout() è molto simile a setInterval(). Mentre setInterval() esegue una
certa funzione alla scadenza di OGNI intervallo di tempo, setTimeOut() esegue una certa
funzione solo una volta allo scadere dell’intervallo di tempo specificato.
Ecco un esempio scherzoso di utilizzo di questa funzione:
(La pagina potete anche vederla su:
http://www.espertoweb.net/utenti/fleo/esempi/countdown.htm )
<html>
<head>
<title>FLEO: Countdown</title>
<script language=javascript>
function avvia_countdown() {
setTimeout("bum()",5000);
};
function bum() {
alert ('BOOOM!!! :)');
};
</script>
</head>
La funzione avvia_countdown() chiama
setTimeout passando come parametri il nome di
una funzione e l’intervallo di tempo da attendere
prima di chiamare quella funzione.
Quando la pagina viene caricata si
genera l’evento onLoad in questo
caso intercettato dal tag BODY.
All’evento si associa il richiamo
della funzione avvia_countdown()
<body onLoad="avvia_countdown()">
Tra cinque secondi accadrà qualcosa di molto importante...
</body>
</html>
Copyright 2002, EspertoWeb - www.espertoweb.it
9