Javaskript on üldpõhimõtetelt objektorienteeritud keel, seetõttu enamiku vahendeid leiab vaid objektide sisse kapseldatuna. Siiski on võimalik kümmetkonda käsklust tarvitada ilma otse objekti ehk isendit loomata või olemas oleva klassi poole pöördumata. Enamkasutatavad neist:
parseInt püüab muuta etteantud väärtuse täisarvuks, antagu see sinna ette siis teksti või numbrina. Nii parseInt(3), parseInt(3.14), parseInt("3"), parseInt("3.14") annavad tulemuseks arvu 3. Samuti teevad seda parseInt("3. klass") kui parseInt("3 õpilast"). Reaalarvu puhul saadakse täisarv lihtsalt murdosa äralõikamise teel, nii et parseInt(5.9) tulemuseks on 5. Teksti puhul hakatakse algusotsast sümboleid lugema ning kuni on tegemist numbritega, seni arvatakse tulemus kokku üheks arvuks. Kui aga tuleb sümbol, millele arvulist väärtust ei anna omistada, siis etteantud sõnet enam edasi ei vaadata ning tulemus väljastatakse teksti ees leidunud numbrite põhjal. Kui tulemust pole võimalik arvuks muuta väljastatakse väärtus NaN ehk Not a Number. Nõnda tulebki, et parseInt("3 õpilast") annab kokku 3, samuti parseInt(" 3 õpilast"), sest algul paiknevaid tühikuid ei arvestata, parseInt("õpilane") aga NaN, sest esimene täht "õ" ei anna kuidagi end kümnendsüsteemis numbriks muuta ning nii ei jää alamprogrammil muud üle kui kasutajale teatada, et tegemist pole numbriga. Samuti on tulemuseks NaN, kui käsule ette sööta tühisõne "", false või true. Kuigi näiteks C-keeles tähistatakse false=0 ning true=1, siis siin on parseInt(true) vastuseks NaN. Kaheksand- ning kuueteistkümnendsüsteemiga saab parseInt samuti hakkama, tunnusedki samad. Kaheksandsüsteemi numbril peab ees olema 0, kuueteistkümnendsüsteemi omal 0X. Nii on parseInt("014") väärtuseks 12, samuti parseInt("014dd") juures, sest järgnevaid tähti lihtsalt ei loeta, kuna neid ei anna vastavas süsteemis arvuks muuta. parseInt(014dd) annab veateate, sest siis tekib parameetriks arusaamatu kombinatsioon, mis pole ei tekst ega number ning millega intepretaator ei oska midagi mõistlikku peale hakata. Kuueteistkümnendsüsteemi puhul aga osatakse f ning sellest tähestikus eespool olevad sümbolid ilusti tõlkida ning väärtus saadakse kätte. parseInt(0x14) annab 20, samuti parseInt("0x14"). Kui kirjutada parseInt("0x14dd"), on tulemuseks 5341.
parseFloat töötab analoogiliselt, st., et seni kuni sinna ette antud teksti algusest leitakse käsule arusaadavaid numbreid, niikaua kogutakse väljastatavat väärtust. parseFloat("3.14 ja veel pool") annab tulemuseks 3.14. parseFloat("xxx") aga teatab NaN, sest etteantud sõnet ei anna ka mitte reaalarvuks muundada. Kaheksand- ning kuueteistkümnendsüsteemi eritunnused siin ei tööta, parseFloat("014") annab tulemuseks 14 ning parseFloat("0x14") väljastab nulli. Seevastu saab aga kümne astet määrata. parseFloat("15E2") annab tulemuseks 1500 ning parseFloat("15E-1") 1.5.
isNaN väljastab true, kui etteantud väärtus pole teisendatav numbriks. Selle abil saab näiteks uurida, kas kasutaja sisestas korrektse arvu.
<html><head><title>Numbri
küsimine</title></head>
<body>
<script>
var nr=prompt("Palun täisarv",
"");
while(isNaN(nr)){
nr=prompt(nr+" pole arv. Proovi
uuesti", "5");
}
for(var i=0; i<nr; i++){
document.writeln("Tere!<br>");
}
</script>
</body></html>
escape ning unescape aitavad, kui on vaja andmeid URL-i kaudu üle kanda või muul moel liigutada, kus kasutada tohib vaid täppideta tähti ning protsendimärki. escape teisendab kõik parajasti sobimatud sümbolid kuueteistkümnendkoodi ning unescape abil saab jälle esialgse oleku tagasi. Näiteks escape("õpilane") annab tulemuseks %F5pilane ning unescape("%F5pilane") = õpilane. Lahtiseletatult F5 on kuueteistkümnendsüsteemis 245 (mis ongi õ kood), protsendimärk ees näitab, et järgnevad kaks sümbolit tuleb kuueteistkümnendkoodis arvuks lugeda. escape("15% väävelhape!") on 15%25%20v%E4%E4velhape%21 , ka protsendimärk ise edastatase kuueteistkümnendkoodi kaudu. Kuueteistkümnendsüsteemi 20 ehk kümnendsüsteemi 32 on tühiku kood, neid tuleb pikemate tekstide kodeerimisel küllalt sageli ette.
eval-nimeline funktsioon täidab hulga ülesandeid, mille kordasaatmiseks mõnes kompileeritavas programmeerimiskeeles tuleb sadu ja tuhandeid ridu kirjutada. Sinna parameetriks antud sõnet käsitletakse programmi tekstina ning lastakse intepretaatoril see tööle panna. Nii võib välja arvutada kasutaja sisestatud avaldiste väärtusi, samuti käivitada etteantud nimega alamprogramme või arvata tükkides kokku muutuja nimesid.
<html><head><title>eval</title></head>
<body>
<script>
var a=3, b=5;
var avaldis=prompt("Palun f(a,
b)", "2*a+b");
var tulemus=eval(avaldis);
alert(tulemus);
</script>
</body></html>
teatab meile rõõmsalt sisestatud avaldise väärtuse.
<html><head><title>eval</title>
<script>
function sisestamine(){
var nr=prompt("Lahtri nr", 1);
var sisu=prompt("Sisestatav tekst
", ":-)");
eval("window.document.vorm1.tekst"+nr+".value='"+sisu+"'");
}
</script>
</head>
<body>
<form name="vorm1">
<input type="text"
name="tekst1">
<input type="text"
name="tekst2"><br>
<input type="text"
name="tekst3">
<input type="Button"
value="Sisesta" onClick="sisestamine();">
</form>
</body></html>
juures antakse eval'ile ette käsklus, kus tal tuleb vastavalt etteantud numbrile paigutada tekst sobivasse tekstivälja ning nagu katse näitas, sai käsklus sellega hakkama.
Järgnevad sisseehitatud objektid koos oma käskudega peaksid kasutatavad olema kõikjal, kus Javaskriptiga tegemist tuleb.
Array |
Massiiv |
Boolean |
Tõeväärtus |
Date |
Aeg |
Function |
Alamprogramm |
Math |
Arvutused |
Number |
Numbrid |
Object |
Objektide üldised omadused |
RegExp |
Regulaaravaldised, sõnetöötlus |
String |
Sõne uurimine |
Siin ei pea iga meeles hoitava väärtuse tarvis uut muutuja nime välja mõtlema, piisab elementide hulgale nime panekust ning pärast järjekorranumbri järgi välja kutsumisest. Nii võib ühte ritta seada õpilaste nimesid, pikkusi või sünniaastaid. Peab vaid teada olema, mitmenda elemendiga meil parajasti tegemist on. Uue massiivi saab luua käsuga new Array(), nii nagu järgnevas näites on
var
riigid=new Array();
Selle tulemusena luuakse massiiv nimega riigid, milles pole ühtegi elementi. Massiivi pikkust näitab tema juurde kuuluv muutuja nimega length. Kui annan käskluse
document.writeln("riike
on "+riigid.length+"<br>");
siis trükitakse välja massiivi pikkus ehk mitu riiki on riikidemassiivis. Kui sinna pole ühtegi nime paigutatud, siis on ka massiiv tühi ning tema elementide arv on 0. Soovides massiivi andmeid lisada, tuleb lihtsalt vastava koha peale väärtus paigutada. Javaskripti massiivi esimene element on alati järjekorranumbriga 0 nii nagu mõnes muuski keeles, näiteks C-s. Pärit on selline lugemine aegadest, kus programmide kirjutamine oli tihedamalt mäluaadressidega seotud ning massivi algkoht tähistas ühtlasi esimese elemendi asukohta, iga järgmise elemendi leidmiseks tuli aga vastav arv korda elementide pikkus mäluaadressi paremale kolida. Javaskripti juures enam aadresside arvutamine takistuseks ei ole, kuid harjunud kirjutuskuju võeti siiagi üle. Elemendi (riigi) lisamiseks kirjutan
riigid[0]="Soome";
Selle tulemusena pannakse esimeseks elemendiks ehk kohale 0 väärtus "Soome" ning massiivi pikkus ehk riigid.length saab väärtuseks 1. Kui kirjutan
riigid[1]="Rootsi";
, siis pannakse jällegi üks element otsa ning riikidemassiivi pikkuseks saab 2. Soovides massiivi elemendid järjestikku välja trükkida, võib luua tsükli, mis ükshaaval iga väärtuse ette võtab ning temaga soovitud toimingu teeb. Kui panna muutuja algväärtuseks 0, iga ringi juures suurendada muutuja väärtust ühe võrra ning lõpetada siis kui ollakse möödunud viimasest elemendist, siis ongi kõik riigid läbi käidud ning ekraanile trükitud. Nagu all näites Taani puhul näha, ei pea massiivile elemente alati järjest lisama. Üldiselt on see mõistlik ning harva läheb vaja olukordi, kus loetelu mõni element tuleb tühjaks jätta, kuid tühjaks jätmise võimaluse keel siiski pakub. Kui algul olid olemas riigid number 0 ja 1 ning nüüd lisasime 3-e, siis automaatselt suurendatakse massiivi pikkus neljale elemendile nii et vahepeal puudu olevale kohale 2 antakse väärtuseks undefined.
<html><head><title>Massiiv</title></head>
<body>
<script>
var riigid=new Array();
document.writeln("riike on
"+riigid.length+"<br>");
riigid[0]="Soome";
document.writeln("riike on
"+riigid.length+"<br>");
riigid[1]="Rootsi";
document.writeln("riike on
"+riigid.length+":<br>");
for(var i=0; i<riigid.length; i++){
document.writeln(i+".
"+riigid[i]+"<br>");
}
riigid[3]="Taani";
document.writeln("riike on
"+riigid.length+":<br>");
for(var i=0; i<riigid.length; i++){
document.writeln(i+".
"+riigid[i]+"<br>");
}
</script>
</body></html>
Väljatrükk:
riike on 0
riike on 1
riike on 2:
0. Soome
1. Rootsi
riike on 4:
0. Soome
1. Rootsi
2. undefined
3. Taani
Juhul kui kohe algul
määrata massiivi pikkus käsuga
var riigid=new
Array(4);
, siis luuakse nelja
elemendiga massiiv, mille igal kohal on väärtus undefined. Kuhu seejärel riigi
nimi pannakse sinna jääb see püsima, muud kohad aga on ikka täidetud sisuga undefined. Eelnenud
programmi väljatrükk kohe algselt neljaelemendilise massiivi korral on
riike on 4
riike on 4
riike on 4:
0. Soome
1. Rootsi
2. undefined
3. undefined
riike on 4:
0. Soome
1. Rootsi
2. undefined
3. Taani
Kui juba algul on teada, millised väärtused massiivi
paigutatakse, siis võib need ette anda kas nurksulgude vahel või siis
parameetritena new Array sulgude sees. Nii loetakse massiivi pikkuseks
etteantud elementide arv ning järjekorras läheb iga väärtus ilusasti oma
kohale.
<html><head><title>Massiiv</title></head>
<body>
<script
language=Javascript1.2>
puud=["kask", "kuusk", "saar"]
document.writeln("Puu nr. 1 on
"+puud[1]+"<br>");
koerad=new Array("Muri", "Pontu", "Polli",
"Muki");
document.writeln("Koeri on kokku
"+koerad.length+
". Koer nr. 1 on "+koerad[1]);
</script>
</body></html>
Kui kasutada tabelina paiknevaid andmeid, siis
üherealisest massiivist ei aita. Iga väärtuse leidmiseks on vaja teada,
millises reas ning millises veerus see asub. Nii on järgmiseks näiteks olevas
tunniplaanis, kus teada saamiseks millisesse tundi minna, tuleb otsida nii
päeva kui tunni järjekorranumbri järgi. Javaskriptis kohe algselt loodavat
kahemõõtmelist massiivi pole, kuid kuna massiivi elementideks võivad samuti
olla massiivid, siis pole tabelina paikneva teabe meelde jätmine kuigi
keeruline. Ühe päeva tunnid on päevade massiivi üheks elemendiks. Kõigepealt
kirjutan
var
tunniplaan=new Array(5);
, et oleks iga päeva
andmeid kuhugi panna. Edasi
tunniplaan[0]=new
Array("Matemaatika", "Kehaline kasvatus",
"Loodusõpetus");
loob kõigepealt
kolmeelemendilise massiivi tundide nimedega ning paigutab siis selle
tunniplaani-nimelise massiivi esimeseks elemendiks. Kui nõnda talitada ka
järgmiste päevade andmetega, siis tulemuseks on kahemõõtmeline ainenimede
massiiv, kus ridadeks on päevad ning veergudeks tundide numbrid.
<html><head><title>Tunniplaan</title>
<script>
var tunniplaan=new Array(5);
tunniplaan[0]=new
Array("Matemaatika", "Kehaline kasvatus",
"Loodusõpetus");
tunniplaan[1]=new
Array("Maateadus", "Emakeel", "Laulmine",
"Kirjandus");
tunniplaan[2]=new
Array("Kunstiõpetus", "Rütmika", "Ajalugu");
tunniplaan[3]=new
Array("Matemaatika", "Emakeel", "Kirjandus");
tunniplaan[4]=new
Array("Ajalugu", "Laulmine");
var nadalapaevad=new Array(
"esmaspäev",
"teisipäev", "kolmapäev", "neljapäev",
"reede"
);
var maxtundidearv=tunniplaan[0].length;
for(var i=1; i<tunniplaan.length;
i++){
if(tunniplaan[i].length>maxtundidearv)maxtundidearv=tunniplaan[i].length;
}
function naitaTunninimi(){
if(tunniplaan[document.vorm1.paev.selectedIndex].length>
document.vorm1.tund.selectedIndex){
document.vorm1.tunninimi.value=
tunniplaan[document.vorm1.paev.selectedIndex][document.vorm1.tund.selectedIndex];
} else {
document.vorm1.tunninimi.value="Koolipäev läbi";
}
}
</script>
</head>
<body
onLoad="naitaTunninimi();">
<form
name="vorm1">
<select name="paev"
onChange="naitaTunninimi();">
<script>
for(var i=0; i<nadalapaevad.length;
i++){
document.writeln("<option>"+nadalapaevad[i]);
}
</script>
</select>
<select name="tund"
onChange="naitaTunninimi();">
<script>
for(var i=0; i<maxtundidearv; i++){
document.writeln("<option>"+(i+1));
}
</script>
</select>. tund:
<input type="text"
name="tunninimi">
</form>
</body></html>
Andmete hulga kasvades pole sageli mõtet kõiki neid nähtavalt lehele välja trükkida, kasutajal võib neist vaja minna vaid tühist osa. Kui aga lehte lugev arvuti või sideliinid liialt üle koormatud pole, siis mõnekümne kilobaidi teabe kohale vedamine pole kuigi suur probleem. Võrreldes piltide mahtudega jääb teksti hulk enamasti tugevasti väiksemaks. Kui kasutaja soovi järele veel vajalik teave massi hulgast aidatakse üles leida, siis peaks tulemus päris hea olema. Eeltoodud tunniplaaninäites hoitakse andmeid kahemõõtmelises massiivis ning kasutajal lastakse valida, millise päeva mitmenda tunni nime ta soovib vaadata. Andmete sisestamine on päises ühes kohas koos, need võib soovi korral kas või eraldi failist sisse lugeda. Kui mõni tund lisatakse, eemaldatakse või muudetakse, siis piisab, kui see muutus sisse viia andmete kirjeldamise juures. Ülejäänud programm juba ise püüab vastavalt uuele olukorrale käituda. Ka nädalapäevade nimed on pandud massiivi. Nii on võimalik kergesti ka laupäev koos sellele vastavate tundidega lisada või programm suisa teise keelde tõlkida ilma, et käsujada sisusse kuigivõrd süvenema peaks. Suurim tundide arv päevas leitakse järgneva käsulõigu abil:
var maxtundidearv=tunniplaan[0].length;
for(var i=1; i<tunniplaan.length;
i++){
if(tunniplaan[i].length>maxtundidearv)maxtundidearv=tunniplaan[i].length;
}
Kõigepealt jäetakse meelde, palju oli tunde esimesel
päeval. Edasi vaadatakse järgemööda kõik järgnevad päevad läbi ning juhul kui
sealt leitakse mõni päev, kus tunde enam kui siiamaani meelde jäetud väärtuses,
siis pannakse leitud arv suurimana kirja. Selliselt toimides on lõpuks teada,
palju võib ühel päeval tunde olla ning kui lähteandmetesse tekib hästi pikk
päev, siis teatakse valikmenüüsse ka vastavad numbrid lisada. Kui aga tundide
arv kahaneb, siis ei jää üleliigne number kasutaja silma alla teda häirima.
for(var
i=0; i<maxtundidearv; i++){
document.writeln("<option>"+(i+1));
}
Niisuguse tsükli abil
kirjutatakse valikuid just nii palju kui maxtundidearv näitab. Arvutus (i+1) on
väärtuse leidmiseks tarvilik seepärast, et kui i esimene väärtus on 0 ja suurim
väärtus maxtundidearv-1 nagu massiivielementide ja menüüelementide
järjekorranumbrite lugemisel tavaks on, siis kasutaja näeks tavapärast ühega
algavat tundide järjekorda tuleb indeksile üks juurde liita.
Tunni nime näitamisel kontrollitakse kõigepealt, kas
vastaval päeval üldse märgitud arvu tunde on. Kuna rippmenüü näitab suurimat
nädalas leitud tundide arvu päevas, siis võib kergesti juhtuda, et tegelikult
kolme tunniga päeval otsitakse viiendat tundi. Et kasutaja ette ei satuks
massiivi olematut elementi tähistav "undefined", selleks
kontrollitakse tundide arvu ning küsitava tunni vastavust. Leides, et
soovitakse lõppenud päeva järel veel tarkust taga nõudma minna teatatakse
otsijale rõõmsalt, et koolipäev on läbi.
function naitaTunninimi(){
if(tunniplaan[document.vorm1.paev.selectedIndex].length>
document.vorm1.tund.selectedIndex){
document.vorm1.tunninimi.value=
tunniplaan[document.vorm1.paev.selectedIndex][document.vorm1.tund.selectedIndex];
} else {
document.vorm1.tunninimi.value="Koolipäev läbi";
}
}
Paljas tunninime näitamise
funktsiooni loomine iseeenesest ei too veel kasutaja ette soovitud väärtust.
Ilma eraldi märkimata võib proovida tunde valida kuitahes kaua, lahendust
pakkuva tekstivälja sisse ei ilmu midagi. Kui mõlema rippmenüü juurde
kirjutada, et valiku muutumisel tunninime näidata tuleb, siis on lootust, et
kasutaja silma alla ka vastus jõuab.
<select
name="tund" onChange="naitaTunninimi();">
Et lehe avamisel ei tunduks nagu esmaspäeva esimene
tund suisa puuduks, siis tuleks ka algul valikute olekutele vastavat väärtust
näidata ning selleks sobib sama juba vastavaks otstarbeks loodud alamprogramm.
<body
onLoad="naitaTunninimi();">
Andmete talletamine ei pruugi piirduda kahemõõtmelise
massiiviga ning ka tulemusteks tuleb edastada enamjaolt rohkemat kui üht sõna.
Kui tuleks lisaks päevale ja tunnile määrata ka klass mille tunninime
otsitakse, siis tuleks lihtsalt üks massiiv juurde luua, mille iga element
tähistaks ühele klassile vastavat tunniplaani. Nii võib tunni otsimiseks lisada
veel ühe rippmenüü, millega määrata, millise klassi tunniga peaks tegemist
olema. Kui aga soovida kõikide klasside reedeseid tunde või ühe klassi kõiki
tunde, siis jääb tekstivälja võimalustest väheks. Tuleb kasutada kas tekstiala
ning tühikutega otsitavad väärtused loetavalt paika lükata või lausa iga
päringu tarvis aken avada, kus vastused ilusasti tabelina kirjas on.
Elementide järjekorda seadmine on javaskriptis
lihtsaks tehtud. Kui mul on loodud kolmeelemendiline massiiv nimega sonad, siis
sealsete sõnade tähestiku järjekorda seadmiseks piisab käsust
sonad.sort();
Rittaseadmise aluseks
arvestatakse, mis tulemus saadakse "on suurem kui (>)" märgi abil.
Kuna a on tähestikus eespool kui s, on võrratus
"sai">"allveelaev" tõene. Arvud saadakse niimoodi ilusti
ritta, kuid kuna sõnedel võetakse tähestiku aluseks paiknemine kooditabelis,
siis eesti täpitähtedega sõnade rittaseadmisel tekib probleeme. "õ"
koodiks on 245, "ä" koodiks 228, kuid viimane peaks esimesest taga
pool paiknema. Et meile soovitavat tulemust saada tuleks oma alamprogramm
kirjutada, mis hoolitseks, et sõnade võrdlemisel õigeid tulemusi saadaks.
Näiteks on toodud lihtsam võrdlusfunktsioon, mis määrab nende järjekorra
sõltuvalt sõnade pikkusest. Funktsioon peab väljastama nullist suurema arvu,
kui esimene etteantud parameeter on alamprogrammile antud käskude järgi suurem
kui teine ning nullist väiksema arvu, kui esimene parameeter peaks teisest
väiksem olema. Etteantud tingimuse järgi võrdsuse korral peab alamprogramm
väljastama nulli. Sarnaselt etteantud alamprogrammi järgi võrdlemist esineb ka
teistes programmeerimiskeeltes, näiteks C ja Java. Sõnapikkuste võrdlemiseks on
function lyhemEtte(s1, s2){
return
s1.length-s2.length;
}
mis lahutab esimese sõna
pikkusest teise sõna pikkuse. Nagu näha, on funktsioonile ette antud tingimused
täidetud: kui esimene on pikem, jääb tulemus üle nulli. Kui teine pikem siis
alla ning ühepikkuste sõnade puhul on pikkuste vahe 0.
<html><head><title>Sortimine</title>
<script>
var
sonad=new Array();
sonad[0]="kala";
sonad[1]="sai";
sonad[2]="allveelaev";
function
lyhemEtte(s1, s2){
return
s1.length-s2.length;
}
</script>
</head><body>
Sõnad: <br>
<script>
for(var
i=0; i<sonad.length; i++){
document.writeln(sonad[i]+"<br>");
}
document.writeln("<p>Sorteeritult:<br>");
sonad.sort();
for(var
i=0; i<sonad.length; i++){
document.writeln(sonad[i]+"<br>");
}
document.writeln("<p>Pikkuse järgi
sorteeritult:<br>");
sonad.sort(lyhemEtte);
for(var
i=0; i<sonad.length; i++){
document.writeln(sonad[i]+"<br>");
}
</script>
</body></html>
Ning töö väljund.
Sõnad:
kala
sai
allveelaev
Sorteeritult:
allveelaev
kala
sai
Pikkuse järgi sorteeritult:
sai
kala
allveelaev
Kuupäeva ning kellaaja
küsimiseks ja ka muudeks ajaarvutusteks on Javaskriptis klass Date. Kui
kirjutada
var praegu=new
Date();
, siis luuakse
kuupäevatüüpi isend ning omistatakse see muutujale nimega praegu. Tühjade
sulgudega loodud Date saab enese sisse tekkimise hetkel olnud aja. Aega
hoitakse objektis ühe suure numbrina ehk millisekundite arvuna alatest 1.
jaanuarist 1970. Esmapilgul võib selline aja hoidmise viis kahtlane tunduda,
kuid nii on kergem üksikuid aegu mälus hoida ja omavahel võrrelda ning arvutile
ei valmista kuigi palju raskusi kasutaja soovi korral sellest tekkinud ühest
pikast numbrist soovitud komponente nagu päev, kuu, aasta, tunnid, minutid ja
sekundid kätte saada.
<html><head><title>Kuupäev</title></head>
<body>
<script>
var praegu=new Date();
document.writeln("Täna on
"+praegu.getDate()+"."+(praegu.getMonth()+1)+"<br>");
document.writeln("Kell on
"+praegu.getHours()+":"+praegu.getMinutes()+
":"+praegu.getSeconds()+"<br>");
</script>
</body></html>
Muud väärtused tulevad nii nagu ikka inimesed
kasutavad, st., et esimese kuupäeva puhul väljastatakse number 1 ning pool
tundi on 30 minutit. Kuude ning nädalapäevade juures aga on arvestatud
massiivide abil väärtuse tekstiks muundamist ning seetõttu hakkavad nende
väärtused nullist. Seega jaanuari puhul väljastab getMonth() 0-i, veebruari
puhul ühe jne. Nädal hakkab peale pühapäevast nagu keeleloojate kodumaal tavaks
ning pühapäevale vastab 0, esmaspäevale 1 kuni laupäev=6-ni välja. Nagu alt
näitest näha, annab niimoodi ilusti kuude ja päevade nimetused sõnadega
asendada. Aasta annab mõni seilur korralikult neljakohalisena, aga näiteks
vanemad Netscape versioonid väljastavad aastanumbreid kaugusena aastast 1900.
Siis tuleb, et 1989=89 ning 1993=93, kuid
et 2001 puhul antakse välja 101, selle peale kirjutajad ei tulnud mitte,
kes see ikka nii pika aja peale ette mõtleb. Et ekraani peal tulemus
arusaadaval kujul paistaks, sellepärast tuleks aastanumbrite puhul ennustada,
millise sajandi aastaarvuga on tegemist ning siis vajaduse korral algsele
väärtusele 1900 juurde liita, et Gregoriaani kalendri järgi sobilik number
välja paistaks.
Aegade vahet saab leida, kui koostada kummagi
ajahetke tarvis suurest paugust (01.01.70) aega näitav number ning siis
suuremast väiksem lahutada. Kui soovin teada aasta 2001 algusele vastavat
hetke, siis loon ajaobjekti andes talle ette aasta, kuu ja päeva.
var
aastaalgus=new Date(2001, 0, 1);
Lahutades
praegusest ajatemplist aastaalgusele vastava ajatempli väärtuse, saab
tulemuseks nende kahe hetke vahe millisekundites. Edasi võib seda väärtust
töödeldes muuta ta parasjagu vajalikeks suurusteks.
var
vahe=praegu.getTime()-aastaalgus.getTime();
Millisekundite sekunditeks tõlkimiseks piisab
nende jagamisest tuhandega. Tahtes millisekundeid arvutada päevadeks tuleb
algne väärtus jagada millisekundite arvuga päevas. Et korraga annab sellist
suurt arvu nuputada, siis võib kokku korrutada millisekundid sekundis (1000),
sekundid minutis (60), minutid tunnis (60) ning tunnid päevas(24).
var
paevi=vahe/(1000*60*60*24);
<html><head><title>Kuupäev</title>
<script>
var nadalapaevad=new Array(
"pühapäev",
"esmaspäev", "teisipäev", "kolmapäev",
"neljapäev",
"reede", "laupäev"
);
var kuud=new Array(
"jaanuar",
"veebruar", "märts", "aprill", "mai",
"juuni",
"juuli", "august",
"september", "oktoober", "november",
"detseber"
);
</script>
</head>
<body>
<script>
var praegu=new Date();
var aasta=praegu.getYear();
if(aasta<1900)aasta=aasta+1900;
document.writeln("Arvuti teatab
ajaks"+praegu.toLocaleString()+"<br>");
document.writeln("Ise kokku pannes
tuleb "+
nadalapaevad[praegu.getDay()]+",
"+praegu.getDate()+". "+
kuud[praegu.getMonth()]+" aastal
"+aasta+"<br>"
);
var aastaalgus=new Date(aasta, 0, 1);
var
vahe=praegu.getTime()-aastaalgus.getTime();
var paevi=vahe/(1000*60*60*24);
document.writeln("Aasta algusest on
möödunud "+vahe/1000+
" sekundit ehk "+paevi+" päeva. <br>Täna on aasta "+
(parseInt(paevi)+1)+".
päev.");
</script>
</body></html>
Mõõta
saab ka lühemaid ajavahemikke. Kui on vaja teada, kaua kulus kasutaja andmete
otsimiseks või ülesannete lahendamiseks aega, võib lihtsalt jätta meelde algaja
ja lõppaja, leida nende vahel olevad millisekundid ning väärtus ongi käes. Nüüd
on juba programmi mure, mis sellega edasi teha. Kui soovida veebilehele panna
tiksuma kella, siis piisab, kui luua alamprogramm, mis jooksva aja masinalt
küsib ja sealt kellaaja kuhugi tekstivälja joonistab. Kui funktsioon panna
käivituma korra sekundis, siis täidabki see kella ülesandeid.