Sisseehitatud objektid ja funktsioonid

 

                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.

 

 

Sisseehitatud objektide loetelu

 

                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

 

               

 

 

Massiiv (Array)

                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

 

Algväärtustamine

 

                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>

 

Kahemõõtmeline massiiv

 

                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 väljastamine

 

                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.

 

Sortimine

 

                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

 

Aeg (Date)

 

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.