Objekt Date v JavaScriptu omogoča delo z datumom in časom. Vsak objekt Date v ozadju predstavlja določen trenutek kot število milisekund, ki so pretekle od 1. januarja 1970 ob 00:00:00 po času UTC. Na podlagi te vrednosti lahko pridobivamo ali nastavljamo leto, mesec, dan, uro, minute, sekunde in milisekunde.
Pomni: Objekt Date ne hrani “leto, mesec in dan” kot ločene neodvisne podatke, ampak trenutek v času. Posamezne dele datuma in časa pridobimo z metodami, kot so getFullYear(), getMonth() in getDate().
Osnovna pravila
- Objekt
Datepredstavlja trenutek v času. - Osnovna številska vrednost objekta
Dateje število milisekund od 1. januarja 1970 po časuUTC. - Za isti trenutek lahko dobimo lokalni ali
UTCprikaz časa. - Pri konstruktorju
new Date(leto, mesec, ...)so meseci oštevilčeni od0do11. - Pri razčlenjevanju nizov je praviloma najzanesljivejši standardni zapis datuma.
Primerjave
Osnovno o objektu Date
Objekt Date lahko izpišemo kot besedilo ali pa pridobimo njegovo številsko vrednost z metodo getTime(). Obe predstavitvi se nanašata na isti trenutek.
Čas v JavaScriptu lahko izpišemo kot niz:
ali kot število milisekund:
Pozor: Če objekt Date ni veljaven, njegova številska vrednost postane NaN. To pomeni, da objekt ne predstavlja veljavnega trenutka v času.
Ustvarjanje datuma
Objekt Date ustvarimo s konstruktorjem new Date(). Najpogostejši načini so ustvarjanje trenutnega časa, ustvarjanje iz števila milisekund, iz niza ali iz posameznih številskih delov datuma.
| Konstruktor | Opis |
|---|---|
new Date() |
Ustvari objekt, ki predstavlja trenutni datum in čas. |
new Date(milliseconds) |
Ustvari objekt iz števila milisekund od 1. januarja 1970 po času UTC. |
new Date(dateString) |
Poskusi ustvariti datum iz niza. |
new Date(year, month, day, hours, minutes, seconds, milliseconds) |
Ustvari datum iz posameznih številskih delov. Mesec je oštevilčen od 0 do 11. |
<p id="primer3"></p>
<script>
{
const a = new Date();
const b = new Date(0);
const c = new Date("2025-05-09");
const e = new Date(2025, 4, 9);
document.getElementById("primer3").innerHTML =
a + "<br>" +
b + "<br>" +
c + "<br>" +
e;
}
</script>
Pomni: Pri zapisu new Date(2025, 4, 9) vrednost 4 pomeni maj, ne april. Meseci so pri tem konstruktorju oštevilčeni od nič naprej.
Metode get...
Metode get... uporabimo za pridobivanje posameznih delov datuma po lokalnem času.
| Metoda | Opis |
|---|---|
getDate() |
Vrne dan v mesecu od 1 do 31. |
getDay() |
Vrne dan v tednu od 0 do 6, kjer je 0 nedelja. |
getFullYear() |
Vrne letnico po lokalnem času. |
getHours() |
Vrne uro od 0 do 23. |
getMinutes() |
Vrne minute od 0 do 59. |
getMonth() |
Vrne mesec od 0 do 11. |
getSeconds() |
Vrne sekunde od 0 do 59. |
getTime() |
Vrne število milisekund od 1. januarja 1970 po času UTC. |
Metoda getDay()
Metoda getDay() vrne številko dneva v tednu po lokalnem času. Če želimo ime dneva, lahko uporabimo tabelo z imeni dni.
<p id="primer4"></p>
<script>
{
const d = new Date();
const dnevi = ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"];
document.getElementById("primer4").textContent = dnevi[d.getDay()];
}
</script>
Metoda getFullYear()
Metoda getFullYear() vrne neokrajšano letnico po lokalnem času.
<p id="primer5"></p>
<script>
{
const d = new Date();
document.getElementById("primer5").textContent = d.getFullYear();
}
</script>
Metoda getTime()
Metoda getTime() vrne število milisekund od začetnega referenčnega trenutka.
<p id="primer6"></p>
<script>
{
const d = new Date();
document.getElementById("primer6").textContent = d.getTime();
}
</script>
Metode set...
Metode set... uporabimo za spreminjanje objekta Date. Tako lahko nastavimo posamezne dele datuma ali pa datum premikamo naprej in nazaj.
| Metoda | Opis |
|---|---|
setDate(dan) |
Nastavi dan v mesecu po lokalnem času. |
setFullYear(leto, mesec, dan) |
Nastavi letnico in po potrebi tudi mesec ter dan. |
setHours(ura, min, sek, ms) |
Nastavi uro in po potrebi še minute, sekunde in milisekunde. |
setMonth(mesec, dan) |
Nastavi mesec in po potrebi tudi dan. |
setTime(cas) |
Nastavi datum iz števila milisekund od referenčnega trenutka. |
Metoda setFullYear()
Metoda setFullYear() spremeni letnico po lokalnem času.
<p id="primer7"></p>
<script>
{
const d = new Date();
d.setFullYear(2010, 8, 11);
document.getElementById("primer7").textContent = d;
}
</script>
Metoda setDate()
Metodo setDate() lahko uporabimo tudi za dodajanje ali odštevanje dni.
<p id="primer8"></p>
<script>
{
const d = new Date();
d.setDate(d.getDate() + 20);
document.getElementById("primer8").textContent = d;
}
</script>
UTC in lokalni čas
Objekt Date omogoča delo z lokalnim časom in z UTC. Zato poleg metod, kot je getHours(), obstajajo tudi metode, kot je getUTCHours(). Razlika med obema pristopoma je v časovnem pasu, ki ga uporabimo za prikaz istega trenutka.
<p id="primer9"></p>
<script>
{
const d = new Date();
document.getElementById("primer9").innerHTML =
"Lokalna ura: " + d.getHours() + "<br>" +
"UTC ura: " + d.getUTCHours();
}
</script>
Pozor: Isti objekt Date lahko pri lokalnih in UTC metodah da različne številčne vrednosti za uro, dan ali mesec. To ne pomeni, da gre za dva različna trenutka, ampak za dva različna prikaza istega trenutka.
Zapisi datumov
Za izpis datuma v standardni obliki pogosto uporabljamo toISOString(), ki vrne zapis v poenostavljenem formatu ISO 8601 in vedno v času UTC. Za prikaz uporabniku pa pogosto uporabimo toLocaleString(), ki upošteva jezikovne in krajevne nastavitve okolja.
| Metoda | Opis |
|---|---|
toISOString() |
Vrne standardiziran niz datuma in časa v formatu ISO in v času UTC. |
toLocaleString() |
Vrne krajevno prilagojen izpis datuma in časa. |
Date.parse(niz) |
Poskusi razčleniti niz in vrne število milisekund. |
Date.UTC(...) |
Vrne število milisekund za podane dele datuma v času UTC. |
<p id="primer10"></p>
<script>
{
const d = new Date("2025-05-09T14:30:00Z");
document.getElementById("primer10").innerHTML =
d.toISOString() + "<br>" +
d.toLocaleString();
}
</script>
Pomni: Pri razčlenjevanju datumov v nizu je praviloma najbolj pregledna in zanesljiva uporaba standardnega ISO zapisa, na primer 2025-05-09 ali 2025-05-09T14:30:00Z.
Temporal
Objekt Temporal je sodobnejši API za delo z datumom in časom v JavaScriptu. Zasnovan je kot celovitejša in preglednejša zamenjava za objekt Date. Temporal loči med različnimi vrstami časovnih podatkov, na primer med datumom brez časa, časom brez časovnega pasu, natančnim trenutkom in datumom s časovnim pasom. Takšna razdelitev zmanjša možnost napak, ki pri objektu Date pogosto nastanejo zaradi mešanja lokalnega časa, časa UTC in nizov različnih oblik.
Pomni: Temporal uvaja več specializiranih tipov. Med pomembnejšimi so Temporal.PlainDate za datum brez ure in časovnega pasu, Temporal.PlainDateTime za datum in uro brez časovnega pasu, Temporal.Instant za natančen trenutek v času ter Temporal.ZonedDateTime za datum in čas skupaj s časovnim pasom.
Za pridobivanje trenutnega časa Temporal uporablja prostor imen Temporal.Now. Ta vsebuje metode za pridobivanje trenutnega datuma, časa ali natančnega trenutka v različnih oblikah.
| Objekt | Opis |
|---|---|
Temporal.Now |
Vsebuje statične metode za pridobivanje trenutnega datuma, časa ali trenutka. |
Temporal.PlainDate |
Predstavlja koledarski datum brez ure in brez časovnega pasu. |
Temporal.PlainDateTime |
Predstavlja datum in uro brez časovnega pasu. |
Temporal.Instant |
Predstavlja en sam natančen trenutek v času z nanosekundno natančnostjo. |
Temporal.ZonedDateTime |
Predstavlja datum in čas skupaj s časovnim pasom in koledarjem. |
Temporal.Duration |
Predstavlja časovno trajanje, ki ga lahko uporabimo pri računanju z datumi in časi. |
Temporal je posebej uporaben v primerih, ko potrebujemo jasno ločevanje med različnimi vrstami časovnih podatkov. Če želimo na primer predstaviti koledarski datum rojstva, je primeren Temporal.PlainDate. Če želimo predstaviti natančen trenutek, ko je bilo nekaj objavljeno na strežniku, je primeren Temporal.Instant. Če želimo delati z datumom in uro v določenem časovnem pasu, je primeren Temporal.ZonedDateTime.
Primer Temporal.PlainDate
Objekt Temporal.PlainDate uporabimo, kadar potrebujemo samo datum brez ure in brez časovnega pasu.
<p id="primer11"></p>
<script>
{
const datum = Temporal.PlainDate.from("2025-05-09");
document.getElementById("primer11").textContent =
datum.year + "-" + datum.month + "-" + datum.day;
}
</script>
Za prikaz tega zgleda mora okolje podpirati Temporal.
Primer Temporal.Now in Temporal.Instant
Objekt Temporal.Instant predstavlja natančen trenutek v času. Pridobimo ga lahko tudi prek prostora imen Temporal.Now.
<p id="primer12"></p>
<script>
{
const trenutek = Temporal.Now.instant();
document.getElementById("primer12").textContent = trenutek.toString();
}
</script>
Za prikaz tega zgleda mora okolje podpirati Temporal.
Primer Temporal.ZonedDateTime
Objekt Temporal.ZonedDateTime uporabimo, kadar želimo poleg datuma in ure ohraniti tudi časovni pas. Ta tip je posebej uporaben pri pravilnem računanju čez prehode med poletnim in zimskim časom.
<p id="primer13"></p>
<script>
{
const zdt = Temporal.ZonedDateTime.from("2025-05-09T14:30:00+02:00[Europe/Ljubljana]");
document.getElementById("primer13").textContent = zdt.toString();
}
</script>
Za prikaz tega zgleda mora okolje podpirati Temporal.
Date in Temporal
Objekt Date je še vedno zelo razširjen, vendar je Temporal zasnovan kot preglednejši sodobni API za novo kodo. Temporal jasneje loči med različnimi vrstami datumov in časov, vključuje podporo za časovne pasove in zmanjšuje pogoste napake pri delu z datumom in časom.
Pozor: Objekt Temporal trenutno še ni enako široko podprt v vseh okoljih kot objekt Date. Zato je pri učnih primerih in pri praktični rabi smiselno preveriti podporo okolja, preden ga uporabimo kot edino rešitev.
Priporočila
- Pri številskem konstruktorju
new Date(leto, mesec, ...)vedno upoštevaj, da se meseci začnejo pri0. - Pri delu z mednarodnimi datumi in izmenjavo podatkov pogosto uporabi
toISOString(). - Za uporabniški prikaz datuma pogosto uporabi
toLocaleString()ali sorodne krajevno prilagojene metode. - Pri računanju razlik ali primerjavi datumov pogosto uporabi
getTime(). - Pri razčlenjevanju nizov praviloma uporabi standardni zapis datuma.
- Za novo kodo, kadar je podpora okolja ustrezna, razmisli o uporabi
Temporalnamesto objektaDate.
Pogoste napake
- Mesec pri konstruktorju
new Date(leto, mesec, dan)se razume kot vrednost od1do12, čeprav JavaScript pričakuje vrednost od0do11. - Metodi
getDay()ingetDate()se obravnavata kot enakovredni, čeprav prva vrne dan v tednu, druga pa dan v mesecu. - Lokalni čas in
UTCse mešata brez jasne razlage, kar povzroči nejasne rezultate pri urah ali datumih. - Pri razčlenjevanju datumov se uporabljajo nestandardni nizi, ki niso enako zanesljivi v vseh okoljih.
- Objekt
Datese uporablja kot sodoben celovit API za vse vrste datumov in časov, čeprav ima več zgodovinskih omejitev in je za novejše primere uporabe zasnovan APITemporal. - Objekt
Datese uporablja tudi tam, kjer bi bil zaradi jasnejšega pomena primernejšiTemporal.PlainDate,Temporal.InstantaliTemporal.ZonedDateTime. - Pred uporabo objekta
Temporalse ne preveri podpora okolja, čeprav ta API še ni enako široko razširjen kot objektDate.