Obțineți ora javascript curentă. TempusJS - lucrul cu date în javascript. Conversia orei și datei curente într-un șir care poate fi citit de om

Obținerea datei curente în JavaScript este foarte ușor. Pentru asta este obiectul Date. Sintaxa sa este destul de simplă, iar numele metodelor sunt intuitive. În exemplele de mai jos, vă voi arăta cum să lucrați cu un obiect Date (date nouă JavaScript) pentru a obține anul curent, luna, ziua și ora până la milisecundă!

Obținerea datei curente:

Pentru a obține data curentă în JavaScript, utilizați cuvântul cheie nou pentru a crea o nouă instanță a obiectului Date.

var data = data noua(); console.log(data);

Acest cod imprimă următoarele informații pe consolă:

//Marți, 02 februarie 2016 15:46:56 GMT-0500 (Eastern Standard Time)

Afișează ziua curentă a săptămânii, luna curentă, ziua lunii, anul și chiar ora curentă în format de 24 de ore. Fragmentul „GMT” înseamnă Greenwich Mean Time, iar „-0500” este diferența de fus orar dintre ora locală și GMT.

Citat din Wikipedia: „Greenwich Mean Time (GMT) este ora medie solară la Observatorul Regal din Greenwich, Londra”. Aceasta este legată de Timpul Universal Coordonat (UTC). „Eastern Standard Time” din valoarea dată afișată se referă la fusul orar al browserului sau al computerului dumneavoastră.

* Vă rugăm să rețineți că GMT și UTC sunt diferite. Vom lua în considerare valorile UTC în minute.

* De asemenea, rețineți că o dată în JavaScript este determinată de timpul în milisecunde care a trecut de la miezul nopții 01 ianuarie 1970, UTC. Există 86.400.000 de milisecunde într-o zi. Intervalul unui obiect Date este de la -100.000.000 de zile până la 100.000.000 de zile în raport cu 01 ianuarie 1970, UTC.

*Valorile obținute prin metoda menționată mai sus depind de setările de sistem ale dispozitivului dumneavoastră. Dacă modificați setările ceasului computerului dvs., se va schimba și ora la care va reveni această metodă.

Bine, ne-am dat seama de noile formate Data JavaScript și suntem acum gata să mergem mai departe!

Obținerea zilei săptămânii:

Pentru a obține ziua săptămânii, utilizați metoda JavaScript getDay() a obiectului Date:

var zi = data.getDay(); console.log(zi);

*Vă rugăm să rețineți că zilele săptămânii sunt numerotate de la 0 la 6, duminică = 0, luni = 1, marți = 2 și așa mai departe.

Obținerea lunii:

Pentru a obține luna curentă a anului curent, utilizați metoda getMonth(). Înainte de asta am spus că denumirile metodelor sunt intuitive!

var luna = data.getMonth(); console.log(luna); //1

*Rețineți că, ca și zilele săptămânii, lunile sunt returnate într-un format numeric de la 0 la 11; Ianuarie = 0, februarie = 1, martie = 2 și așa mai departe.

Obținerea zilei lunii:

Pentru a obține ziua lunii, puteți utiliza metoda GetDate().

var dayOfMonth = data.getDate(); console.log(dayOfMonth); //2

* Metoda GetDate() returnează zilele lunii, numerotate de la 1 la 31; numărul 1 corespunde primei zile a lunii.

Obținerea timpului:

Pentru a obține ora curentă, se folosește metoda GetTime().

var time = date.getTime(); console.log(timp); //1454461242058

Arata... ciudat... Ce este? Veți vedea numărul de milisecunde care au trecut de la 1 ianuarie 1970 00:00:00 UTC. Deci cati ani are asta?

1454461242058 ms / 31540000000 ms pe an = aproximativ 46 de ani
1970 + 46 de ani = 2016

Să verificăm pentru a ne asigura că:

var year = date.getFullYear(); console.log(an) //2016

Da, asta este! Tocmai am folosit JavaScript pentru a afișa data și ora curente folosind data nouă.

Un alt lucru util pentru site-uri web este inserarea datei curente. Zeci de exemple de scripturi de date pot fi găsite pe Internet, dar multe dintre ele, după părerea mea, sunt greoaie și, prin urmare, urâte. Între timp, folosind instrumente JavaScript standard, puteți insera o dată într-o pagină de site foarte simplu. Il folosesc foarte des! În imaginea (captură de ecran de pe site-ul actual) a moșiei Skazka!

Iată întregul script al datei:

În opinia mea, nu poate fi mai simplu, destul de frumos și de înțeles. Dacă nu doriți să studiați construcția acestui script, atunci pur și simplu lipiți-l oriunde pe pagina HTML și obțineți următoarea inscripție:

O altă variantă mai avansată

//
// ]]>
// ]]>
// ]]>
// ]]>
// ]]>
! Astăzi
// + " " + d.getFullYear() + " g.");
// ]]>
// ]]>
// ]]>
// ]]>
// ]]>
// ]]>

Arata cam asa:

Astăzi

În general, nu sunt necesare abilități, doar introduceți prostește codul și totul este ok!

Mai multe detalii:

Deci, începem prin a atribui valoarea datei variabilei d, apoi creăm tablouri (Array) pentru zilele săptămânii (ziua) și lunile (luna), specificându-le în forma gramaticală necesară: caz, număr, literă mare dacă cuvântul apare la începutul datei etc. .p. Ultima linie a scriptului este tipărirea datei efective (document.write). Aici setați ce și în ce ordine veți afișa în linia de dată curentă. Componentele sunt separate unele de altele prin semnul +. Pentru a introduce un spațiu, utilizați construcția " ", iar pentru a introduce litera g (an) utilizați construcția " g ".

După cum puteți vedea din script, elementul get realizează datele de timp curente. Această metodă vă permite să obțineți următoarele informații:

  • getDate() - returnează un număr de la 1 la 31 reprezentând ziua lunii;
  • getDay() - returnează ziua săptămânii ca număr întreg de la 0 (duminică) la 6 (sâmbătă);
  • getMonth() - returnează numărul lunii din an;
  • getFullYear() - returnează anul. Dacă utilizați pur și simplu getYear() , anul curent minus 1900 va fi afișat;
  • get Hours() - returnează ora din zi;
  • getMinutes() - returnează minutele ca număr de la 0 la 59;
  • getSeconds() - returnează numărul de secunde de la 0 la 59.

Nu este întotdeauna convenabil să inserați un script Java direct în pagina unui site web. Este mai bine să plasați descrierea scriptului la începutul paginii între etichete și să setați o variabilă pe care o vom apela după cum este necesar în text. Să-l numim AZI și să definim în el forma de ieșire a datei similară cu cea de mai sus. Scriptul va arăta astfel:


Pentru a afișa data, apelați scriptul în locul dorit din codul HTML al paginii folosind următoarea comandă:


document.write(AZI);

Dacă site-ul dvs. conține multe pagini pe care trebuie să afișați data, atunci este mai convenabil să separați scriptul Java pentru afișarea datei într-un fișier separat, de exemplu, data.js. În practică, aceasta este o pagină formată din primul dintre scripturile descrise, adică cu linia document.write (vezi mai sus). Acesta trebuie să fie localizat în același director cu pagina principală și apelat în locul în care este afișată data după cum urmează:


Nu uitați să verificați dacă fișierul data.js are aceeași codificare ca și documentul principal, altfel data va fi afișată cu cârlige minunate, pătrate și alte trucuri.

Comentariu. Trebuie avut în vedere că scriptul descris afișează data setată pe computerul utilizatorului, care nu corespunde întotdeauna cu ora actuală reală. Dacă trebuie să afișați ora exactă, atunci trebuie să utilizați un script PHP care va afișa ora pe server.

Utilizați new Date() pentru a crea un nou obiect Date care conține data și ora curente.

Rețineți că Data() numit fără argumente este echivalent cu data noua(Data.acum()) .

Odată ce aveți un obiect dată, puteți utiliza oricare dintre mai multe metode disponibile pentru a-i prelua proprietățile (de exemplu, getFullYear() pentru a obține anul cu 4 cifre).

Mai jos sunt câteva metode comune de date.

Obțineți anul curent var year = (new Date()).getFullYear(); console.log(an); // Exemplu de ieșire: 2016 Obține luna curentă var luna = (new Date()).getMonth(); console.log(luna); // Ieșire eșantion: 0

Rețineți că 0 = ianuarie. Acest lucru se datorează faptului că lunile variază de la 0 la 11 , deci este adesea de dorit să adăugați +1 la index.

Obține ziua curentă var day = (new Date()).getDate(); console.log(zi); // Exemplu de ieșire: 31 Obține ora curentă var hours = (new Date()).getHours(); console.log(ore); // Exemplu de ieșire: 10 Obține minutele curente var minute = (new Date()).getMinutes(); console.log(minute); // Exemplu de ieșire: 39 Obține secundele curente var secunde = (new Date()).getSeconds(); console.log(al doilea); // Exemplu de ieșire: 48 Obține milisecunde curente

Pentru a obține milisecunde (de la 0 la 999) ale unei instanțe de obiect Date, utilizați metoda getMilliseconds.

Var milisecunde = (new Date()).getMilliseconds(); console.log(milisecunde);

// Ieșire: milisecunde chiar acum

Convertirea orei și datei curente într-un șir care poate fi citit de om var now = new Date(); // convertiți data într-un șir în format de fus orar UTC: console.log(now.toUTCString()); // Ieșire: miercuri, 21 iunie 2017 09:13:01 GMT

Metoda statică Date.now() returnează numărul de milisecunde care au trecut de la 1 ianuarie 1970 00:00:00 UTC. Pentru a obține numărul de milisecunde care au trecut de atunci folosind o instanță de obiect Date, utilizați metoda getTime.

// obține milisecunde folosind metoda statică acum a Date console.log(Date.now()); // obține milisecunde folosind metoda getTime of Date instanță console.log((new Date()).getTime());

Data și ora fac parte din viața noastră de zi cu zi și, prin urmare, ocupă un loc proeminent în programare. În JavaScript, atunci când creați un site web, poate fi necesar să adăugați un calendar, un program de tren sau o interfață pentru programarea întâlnirilor. Aceste aplicații trebuie să arate orele relevante pe baza fusului orar actual al utilizatorului sau să efectueze calcule legate de sosirea și plecarea unei aeronave sau orele de începere și de sfârșit ale unui eveniment. În plus, poate fi necesar să utilizați JavaScript pentru a trimite rapoarte zilnice la anumite ore sau pentru filtrare (de exemplu, pentru a găsi restaurante deschise la o anumită oră).

Data obiect

În mod implicit, o nouă instanță Date fără argumente creează un obiect cu data și ora curente în conformitate cu setările de sistem ale computerului curent.

De exemplu, încercați să atribuiți data curentă unei variabile. Creați un fișier now.js.

// Setați variabila la data și ora curente
const acum = data noua();
// Vizualizați rezultatul
acum;
Miercuri, 18 octombrie 2017 12:41:34 GMT+0000 (UTC)

Ieșirea este un șir de dată care conține următoarele date:

Data și ora sunt defalcate și afișate într-un mod ușor de citit.

Cu toate acestea, JavaScript interpretează data pe baza unui marcaj temporal Unix, care este o valoare constând din numărul de milisecunde care au trecut de la miezul nopții de 1 ianuarie 1970. Puteți obține marcajul de timp folosind metoda getTime().

// Obțineți marcajul de timp actual
now.getTime();
1508330494000

Numărul mare care apare în rezultat ca marcaj temporal actual reprezintă numărul de milisecunde care au trecut de la 1 ianuarie 1970 la miezul nopții până la 18 octombrie 2017.

O oră zero (sau ora epocă) este reprezentată de șirul de date 01 ianuarie 1970 00:00:00 Ora universală (UTC) și marcajul de timp 0. Puteți testa acest lucru în browser creând o nouă variabilă în fișierul epoch.js și atribuindu-i o nouă instanță Date, bazată pe marcajul de timp 0.

// Atribuiți marca temporală 0 unei variabile noi
const epochTime = new Date(0);
epochTime;
01 ianuarie 1970 00:00:00 Ora universală (UTC)

Timpul zero a fost ales ca standard pentru modul în care computerele măsoară timpul, iar această metodă este folosită în JavaScript. Este important să înțelegeți marcajele de timp și șirurile de date, deoarece aceste concepte pot fi utilizate în funcție de setările și scopul aplicației.

Acum știți cum să creați o nouă instanță Date pe baza orei curente și pe baza unui marcaj de timp. Există un total de patru formate de dată în JavaScript. Pe lângă ora și marca temporală curente implicite, puteți utiliza și un șir de dată sau puteți specifica o anumită dată și oră.

Pentru a demonstra diferitele moduri de a face referire la o anumită dată, încercați să creați noi obiecte Date care reprezintă 4 iulie 1776, ora 12:30 GMT în trei moduri diferite.

// Metoda timestamp
nou Data(-6106015800000);
// Metoda șirului de date
data noua("31 ianuarie 1980 12:30");
// Metoda datei și orei
data noua(1776, 6, 4, 12, 30, 0, 0);

Toate aceste exemple reprezintă aceleași informații despre dată și oră în trei moduri diferite.

După cum puteți vedea, metoda timestamp are un număr negativ; orice dată înainte de ora zero va fi reprezentată ca un număr negativ.

În al treilea exemplu, secundele și milisecundele sunt reprezentate de 0. Dacă vă lipsesc date când creați un obiect Date, trebuie să îl atribuiți la 0. Datele lipsă nu pot fi sărite deoarece ordinea datelor de timp din șir nu schimba. De asemenea, trebuie remarcat faptul că luna iulie este desemnată aici ca 6 și nu ca 7. Acest lucru se datorează faptului că numărătoarea inversă începe nu de la 1, ci de la 0. Mai multe despre asta în secțiunea următoare.

Recuperarea datelor cu get

Având o dată, puteți accesa toate componentele sale folosind diverse metode încorporate. Metodele returnează fiecare parte de dată în raport cu fusul orar local. Fiecare dintre aceste metode începe cu get și returnează un număr relativ. Mai jos este un tabel detaliat cu metode get pentru obiectul Date.

Data/Ora Metodă Gamă Exemplu
An getFullYear() YYYY 1970
Lună getMonth() 0-11 0 = ianuarie
Ziua lunii getDate() 1-31 1 = 1 a lunii
Ziua săptămânii getDay() 0-6 0 = duminica
Oră getHours() 0-23 0 = miezul nopții
Minut getMinutes() 0-59
Doilea getSeconds() 0-59
Milisecundă getMilliseconds() 0-999
Marca temporală getTime()

// Inițializați o nouă instanță de naștere
const ziua de nastere = data noua(1980, 6, 31);

Acum puteți folosi toate metodele pentru a extrage fiecare componentă de dată.

ziua de naștere.getFullYear(); // 1980
ziua de naștere.getMonth(); // 6
ziua de nastere.getDate(); // 31
ziua de nastere.getDay(); // 4
ziua de nastere.getHours(); // 0
ziua de nastere.getMinutes(); // 0
ziua de naștere.getSeconds(); // 0
ziua de naștere.getMilliseconds(); // 0
ziua de nastere.getTime(); // 333849600000 (pentru GMT)

Uneori trebuie să extrageți doar o parte dintr-o dată, iar metodele de obținere încorporate vă vor ajuta în acest sens.

De exemplu, puteți compara data curentă cu data de 3 octombrie pentru a afla dacă este sau nu 3 octombrie.

// Obțineți data de astăzi
const azi = data noua();
// Comparați astăzi cu 3 octombrie
if (today.getDate() === 3 && today.getMonth() === 9) (
console.log(„Este 3 octombrie.”);
) altfel (
console.log(„Nu este 3 octombrie.”);
}
Nu este 3 octombrie.

Metodele de obținere încorporate vă permit să accesați componentele date.

Schimbarea datei cu set

Pentru toate metodele get enumerate mai sus, există o metodă set corespunzătoare. Dacă get este folosit pentru a prelua o anumită componentă de dată, set este folosit pentru a modifica acele componente. Mai jos este un tabel detaliat al metodelor de setare pentru obiectul Date.

Data/Ora Metodă Gamă Exemplu
An setFullYear() YYYY 1970
Lună setMonth() 0-11 0 = ianuarie
Ziua lunii setDate() 1-31 1 = 1 a lunii
Ziua săptămânii setDay() 0-6 0 = duminica
Oră setHours() 0-23 0 = miezul nopții
Minut setMinutes() 0-59
Doilea setSeconds() 0-59
Milisecundă setMillisecunde() 0-999
Marca temporală setTime() Numărul de milisecunde de la ora zero

Aceste metode de setare pot fi folosite pentru a schimba una sau mai multe componente ale datei. De exemplu, puteți modifica anul din variabila ziua de naștere în 1997.

// Schimbați anul zilei de naștere
ziua de naștere.setFullYear(1997);
ziua de naștere;
Joi, 31 iulie 1997 00:00:00 GMT+0000 (UTC)

Acum, când apelați variabila ziua de naștere, vedeți nu 1980, ci 1997.

Metodele de set încorporate vă permit să schimbați diferite părți ale obiectului Date.

metode UTC

Metodele de obținere descrise mai sus preiau componentele datei pe baza setărilor de fus orar local ale utilizatorului. Pentru a spori controlul asupra datelor și orelor, puteți utiliza metodele getUTC, care funcționează la fel ca metodele get, dar calculează timpii pe baza UTC (Coordinated Universal Time). Mai jos este un tabel cu metode UTC pentru obiectul Date în JavaScript.

Data/Ora Metodă Gamă Exemplu
An getUTCFullYear() YYYY 1970
Lună getUTCMonth() 0-11 0 = ianuarie
Ziua lunii getUTCDate() 1-31 1 = 1 a lunii
Ziua săptămânii getUTCDay() 0-6 0 = duminica
Oră getUTCHours() 0-23 0 = miezul nopții
Minut getUTCMinutes() 0-59
Doilea getUTCSeconds() 0-59
Milisecundă getUTCMillisecunde() 0-999

Pentru a testa diferența dintre metodele get locale și metodele get UTC, rulați următorul cod.

// Atribuiți ora curentă unei variabile
const acum = data noua();
// Imprimați fusurile orare locale și UTC
console.log(now.getHours());
console.log(now.getUTCHours());

Acest cod va afișa ora curentă și fusul orar UTC. Dacă în prezent vă aflați în fusul orar UTC, numerele pe care le va afișa programul vor fi aceleași.

UTC oferă un standard de timp internațional și, prin urmare, poate accepta codul pentru a se potrivi fusurilor orare, dacă este necesar în programul dvs.

Concluzie

În acest tutorial, ați învățat cum să instanțiați un obiect Date și cum să utilizați metodele sale încorporate pentru a accesa și modifica componentele unei anumite date. Puteți găsi mai multe informații despre oră și dată în JavaScript din Mozilla Developer Network.

A ști cum să lucrezi cu datele este important pentru multe sarcini JavaScript comune, de la crearea de rapoarte regulate până la afișarea datelor și a programelor în fusul orar corect.

Etichete:

Este rar ca un programator să evite să lucreze cu data și ora. În general, data/ora este un concept de bază și majoritatea limbilor au mecanisme încorporate pentru a lucra cu acest tip de date. S-ar părea că JS nu face excepție, există un tip de date încorporat, există o grămadă de funcții în prototip, totuși...

Cine este de vină Prima problemă apare atunci când trebuie să setați data/ora într-un alt fus orar decât UTC și local. Constructorul Date nu are un astfel de parametru.

Data noua(); data noua(valoare); data noua(dataString); nou Data(an, luna[, zi[, ora[, minut[, secunda[, milisecunda]]]]]);
Singura opțiune în care puteți specifica un offset în raport cu UTC este a treia metodă. Apelarea constructorului în acest format vă permite să treceți offset-ul ca parte a unui șir:

Data nouă ("Dum. 01 Feb 1998 00:00:00 GMT+0700")
Șirul este primit în format RFC2822, ceea ce este foarte incomod și dificil de introdus manual. Este aproape imposibil să obțineți un astfel de șir de la intrarea utilizatorului. Nu-mi imaginez pe cineva care ar fi de acord să introducă o dată în acest format.

În ciuda faptului că în Data puteți seta toți parametrii separat pentru fusul orar UTC, acest lucru nu rezolvă problema - fusul orar va rămâne local. Dar aceasta nu este singura problemă.

Decalajul relativ la UTC nu este o constantă. Aceasta este o funcție a datei, orei (sau marca oră, dacă preferați) și, din nou, fusul orar. De exemplu, pentru Moscova, cea mai recentă conversie de timp oferă:

Data nouă (2014, 9, 25, 0, 0, 0); // 26.10.2014, 21:00:00 GMT+3 data nouă(2014, 9, 27, 0, 0, 0); // 25.10.2014, 22:00:00 GMT+4
Astfel, constructorul din a treia opțiune devine practic inutil, deoarece offset-ul trebuie cunoscut în prealabil. Dar, după cum s-a spus, nu poate fi obținut atât de simplu. Singura bibliotecă pe care am întâlnit-o care utilizează baza de date Olson pentru a calcula schimbările este fusul orar-JS. Problema cu utilizarea acestei biblioteci este că bibliotecile subiacente (selectatorii de dată/ora) nu știu nimic despre ea și folosesc în mod activ data standard în interior. Alte biblioteci care lucrează cu obiectul Date nu fac referire în mod explicit la această bază de date și nu primesc actualizări de la aceasta. (Corectează-mă în comentarii.)

În aplicațiile de afaceri, fusurile orare au sens numai dacă sunt specificate data și ora. De exemplu, dacă ziua de lucru începe la ora 9:00, atunci este puțin probabil să vă așteptați ca colegul dvs. din Vladivostok să înceapă să lucreze la ora 15:00. Fusurile orare nu trebuie luate în considerare și în acest caz data ar trebui să fie afișată în UTC. Cu toate acestea, în cazul evenimentelor regulate care au loc la un moment dat în diferite fusuri orare, este încă necesar un fus orar. De exemplu, scrumul zilnic începe la 10:00 pentru tine și la 13:00 pentru Novosibirsk. Apropo, aceasta este tocmai diferența dintre GMT și UTC. UTC este ora fără un decalaj, iar GMT este ora cu un offset de 0. Permiteți-mi să vă explic cu un exemplu:

31/12/2014, 20:59:59 GMT în fusul orar Moscova ar trebui să arate ca 31/12/2014, 23:59:59 31/12/2014, 20:59:59 UTC în fusul orar Moscova ca 31.12.2014, 20:59:59
Din cauza acestei aritmetici, sunt în principal confuzi. Din păcate, există peste tot o confuzie cu acest parametru. Absența unei indicații directe a unui fus orar în JS este interpretată ca un fus orar local, iar indicația UTC și GMT este echivalentă.

Intl ar putea ajuta în această situație. Aș putea, dar nu trebuie. În special, există un astfel de parametru TimeZone, dar puțin mai departe standardul definește: Fusul orar de utilizat. Singura implementare de valoare pe care trebuie să o recunoască este „UTC”. În prezent, în afară de Chrome, niciun alt browser nu acceptă fusuri orare arbitrare.
Cu intervalele de timp în JS, totul este complet rău - nu există nimic asemănător în limbă. Dacă vrei să o faci bine, fă-o singur.

Ce să fac
  • Opțiunea 1. Nu utilizați un fus orar personalizat. Opțiunea este de preferat și probabil cea mai nedureroasă. Adică aveți doar un fus orar local și UTC. Pentru aceste cazuri, toate browserele par să aibă totul, chiar dacă nu este foarte convenabil. În plus, fusul orar este setat global pentru sistemul de operare și schimbarea acestuia pentru o anumită aplicație web nu este cușer.
  • Opțiunea 2. Dacă sunt necesare fusuri orare arbitrare, nu utilizați un marcaj de timp. Deloc. Stocați ora în banca de economii într-o linie RFC care indică fusul orar. Nu sunt sigur că acest lucru va ajuta la depășirea schimbărilor de fus orar în înțelegerea între browsere, dar cel puțin Chrome este conștient de astfel de schimbări.
  • Opțiunea 3. Situațiile sunt diferite și se întâmplă ca timpul să fie înregistrat în baza de date de pe orice dispozitiv. Adică sub forma unui marcaj de timp. Nu există unde să rulați aici pentru a afișa corect ora, trebuie să cunoașteți fie fusul orar al dispozitivului, fie fusul orar al utilizatorului, sau ambele și să calculați toate schimburile de la mână. Nu poți face asta fără să folosești baza lui Olson.
  • Ar trebui să existe o morală în această poveste, dar nu mai am nimic de adăugat pentru moment. Nu văd niciun progres în proiectul de standard ECMA și probabil că nu va exista.