Pasakyk, laikrodėli, ar ne laikas kavą gerti?

Praeitą kartą Vartiklyje pažvelgėme į dažniausiai naudojamą 'JavaScript' objektą, - eilutes. Tačiau iš 'Java' pasiskolintas ir "Date" objektas, kurį galima naudoti veiksnaus laiko ir datos nustatymui. Šiame 'Vartiklio' WWW puslapyje jis naudojamas laikrodžio realizacijai ir nurodymui, kiek jau minučių praėjo nuo prisijungimo prie paskutinio 'Vartiklio' numerio.

'Javascript' traktuoja "Date" objektą kaip konstruktorių, - pradžioje reikia sukurti naują "Date" objektą, o po to taikyti įvairius "Date" metodus, kad gautume ar priskirtume įvairias reikšmes (ir "Date" objektas neturi charakteristikų - 'properties'). Dažniausiai naudojami metodai prasideda "get" ("gauti"):

getHours() - gauti veiksnios valandos reikšmę;
getMinutes() - gauti veiksnios minutės reikšmę;
getSeconds() - gauti veiksnios sekundės reikšmę;
getYear() - gauti veiksnių metų reikšmę ("96" reiškia "1996");
getMonth() - gauti veiksnaus mėnesio reikšmę ("0" reiškia "Sausis");
getDate() - gauti veiksnios mėnesio dienos reikšmę;
getDay() - gauti veiksnios savaitės dienos reikšmę ("0" reiškia "Sekmadienis");
Naują "Date" objektą galima sukurti keliais būdais. Veiksnaus laiko reikšmę saugantį objektą sukuriame nenurodę jokių parametrų:

var Dabar = new Date();

Tačiau galima nurodyti ir konkrečią laiko reikšmę:

var NaujiMetai = new Date("January 1 1997 00:00:00");
var NaujiMetai = new Date(97, 0, 1, 12, 0, 0);

"Date" metodas taikomas prieš tai sukurtam objektui, pvz.,

var Dabar = new Date();
var Metai = Dabar.getYear();

Nukrypimai ir pavojai

Nors "Date" objektas ir labai viliojantis naudojimui, jo realizacijoje yra keletas klaidų, o kai kurios iš jų nuostabiai padeda "nusmigti" "Netscape Navigator" peržiūros programai.

Pvz., "Macintosh" 2.0 versijoje "Date" laikrodis skuba viena diena, todėl šį skirtumą galima kompensuoti taip:

Dabar.setDate(Dabar.getDate()-1);

Tačiau tokį "prijomą" (gudrybę) reikia nukrreipti tik "Mac" skaitytojams Terpės ir peržiūros programos versijai nustatyti galima naudoti "navigator.userAgent" charakteristiką, tačiau paprasčiau pasinaudoti tokia "apgaule":

var ArMacData = new Date (0); // Priskirti Jam 1, 1970
if (ArMacData == 86400000)
   Dabar.setDate(Dabar.getDate()-1);
Datos iki 1970-ųjų gali "nusmigdinti" "Netscape". Aišku, geriausia išeitis yra nenaudoti šio laikotarpio datų. Tačiau, jeigu leidžiama pačiam skaitytojui įvesti datas, reikia tikrinti, ar jis neįvedė "draudžiamų" reikšmių.

Problemos su 2000-aisiais

"Netscape" nepatinka ir kito šimtmečio datos. Tačiau šį laikotarpį galima "apžioti", jei naudojamos tik skaitinės datos reikšmės, o ne eilutės, pvz.,

var NA1 = new Date ("January 1, 2000");   // Sminga
var NA1 = new Date ("100,0,1");           // Viskas veikia puikiai

Tiesiog - Java
Iš kur Javos tas lėtumas?
Programavimo kalbų istorija
Java 8: Optional prieš null
Lambda išraiškos – Java į naują lygį
Anotacijos Java kalboje
Unix komandinės eilutė
Tcl kalba