Javascript në një kohë të caktuar. TempusJS - duke punuar me datën në javascript. Autodetektimi dhe analizimi i datës


Ekziston një objekt i veçantë për të punuar me datën dhe kohën në JavaScript - Data. Ky objekt mbështetet nga pothuajse të gjitha versionet e JavaScript, dhe ju mund ta përdorni atë pa shikuar prapa për çështje pajtueshmërie.

Data dhe ora në objektin Date nuk ruhen shprehimisht, por si në shumicën e gjuhëve programuese - në formën e numrit të milisekondave që kanë kaluar që nga lindja e Unix, d.m.th. nga 0 orë 0 minuta 1 janar 1970. Një tipar dallues i objektit Date është se të gjitha vlerat e diapazonit kanë indekse që fillojnë me zero. Kjo do të thotë që janari do të ketë indeksin 0 (muaji # 0), dhe dhjetori nuk do të jetë dymbëdhjetë, por muaji i njëmbëdhjetë. E njëjta gjë vlen për ditët e javës, orët, minutat, etj.

Veryshtë shumë e lehtë të krijosh një objekt Date:

// data-koha aktuale var data \u003d data e re (); // data-ora nga vargu ose numri var data \u003d new Data (data); // data-ora nga vlera të ndara var data \u003d new Data (viti, muaji, dita, ora, minuta, sekonda, milisekonda);

Data e objektit ka një numër metodash shumë të dobishme që ju lejojnë të punoni me përbërës individualë të datës-kohë, si dhe të kontrolloni korrektësinë dhe prodhimin e saktë të datës në një format të caktuar.

Metodat për marrjen e përbërësve të datës-kohë
merrniFullViti Kthen vitin (për shembull, 2011).
merrniViti Kthen vitin. Qëllimi i metodës getYear është i njëjtë me qëllimin e getFullYear, megjithatë, kjo metodë është e amortizuar dhe e amortizuar. rezultatet e punës së tij janë të paqarta: për intervalin e datave nga 1900 në 1999, metoda kthen numrin e vitit në shekull (dyshifror, për shembull, 77), dhe për datat jashtë këtij diapazoni, vlera e plotë (katër shifra, për shembull, 2009) kthehet.
merrniMuajin Kthen muajin.
merrniDate Kthen ditën e muajit (numri në muaj).
merrni orë Kthen orën.
merrniMinutat Kthen minutën.
merrni sekondat Kthen të dytën.
merrniMilisekonda Kthen milisekondën.
getDay Kthen ditën e javës.
getTime Kthen kompensimin milisekondë të ruajtur nga objekti.
Metodat për ndryshimin e përbërësve të datës
vendosurFullViti Vendos vitin.
vendosurViti Vendos vitin. Qëllimi i metodës setYear është i njëjtë me qëllimin e setFullYear, por kjo metodë është e amortizuar dhe e amortizuar (si metoda getYear).
setMuaj Vendos muajin.
dataDate Vendos datën në muaj (dita e muajit).
orari i caktuar Cakton orën.
vendos Minuta Vendos minutën.
vendosurSekondat Vendos të dytën.
setMilisekonda Vendos milisekondën.
vendos oren Vendos kompensimin milisekondë nga 00:00:00 01/01/1970
Funksionimi i formatimit të datës dhe orës
te String Kthen një paraqitje vargu të datës dhe orës.
toUTCString Kthen një përfaqësim të vargut të datës dhe orës së konvertuar në kohën UTC. Formati i vargut të kthyer bazohet në të gjitha standardet e Internetit.
toGMTString Kthen një paraqitje të vargut të datës dhe orës së konvertuar në GMT (Koha e Mesme e Greenwich). Formati i vargut i kthyer është në përputhje me të gjitha standardet e Internetit.
nëLocaleString Ngjashëm me toString, por kthen një paraqitje vargu të datës dhe orës së formatuar sipas cilësimeve të lokalizimit të përdoruesit.
teTimeString Kthen një paraqitje të vargut të kohës (vargu përmban vetëm kohën).
toDateString Kthen paraqitjen e vargut të datës (vargu përmban vetëm datën).
nëLocaleTimeString Ngjashëm me toTimeString, por kthen një paraqitje vargu të kohës të formatuar sipas cilësimeve të lokalizimit të përdoruesit.
nëLocaleDateString Ngjashëm me toDateString, por kthen një paraqitje vargu të datës së formatuar sipas cilësimeve të lokalizimit të përdoruesit.
Funksione shtesë
getTimezoneOffset Kthen kompensimin e kohës lokale në kompjuterin e përdoruesit në krahasim me UTC. Kompensimi kthehet për disa minuta.
analizoj Funksioni ju lejon të kontrolloni saktësinë e datës-kohë të shkruar si një varg. Nëse vargu është i saktë, një objekt Data do të krijohet menjëherë.

Objekti Date gjithashtu përmban një numër metodash për të punuar me datat UTC. Këto funksione janë plotësisht të ngjashme me ato që janë konsideruar tashmë, por ato përmbajnë prefiksin "UTC" në emër dhe punojnë vetëm me kohë "universale": getUTCSeconds, setUTCFullYear, etj.

Le të shqyrtojmë një shembull të punës me datat:

Dhe këtu është rezultati i këtij skenari:


Siç mund ta shihni, paraqitja e datës ndryshon ndjeshëm në varësi të formatit të përdorur. Prandaj, kur punoni me kohën e datës, duhet t'i përmbaheni disa rregullave të thjeshta:

1. Përdorni formatet UTC ose GMT sa herë që është e mundur. Kjo është veçanërisht e rëndësishme kur krijoni zgjidhje të shpërndara (për shembull, klientë të sistemeve të pagesave). Përdorimi i një kohe të përbashkët referimi do t'ju japë garanci (megjithëse jo njëqind për qind) se ju dhe partneri juaj i largët do të interpretoni të dhënat e marra në të njëjtën mënyrë.

2. Ka kuptim të përdorni datën dhe kohën e lokalizuar vetëm kur i shfaqni ato te përdoruesi. Në të gjitha rastet e tjera, është më mirë të refuzosh të dhënat e lokalizuara.

3. Nëse akoma duhet të përdorni një datë dhe orë lokale - mos harroni të merrni parasysh kompensimin e kohës lokale në krahasim me kohën e referencës (UTC ose GMT).

Ndjekja e këtyre rregullave do t'ju shpëtojë nga më të metat logjike dhe mangësitë, që do të thotë se do ta bëjë kodin tuaj më të qëndrueshëm dhe me cilësi të lartë.

Rareshtë e rrallë që një programues të shmangë punën me datat dhe orët. Në përgjithësi, data / koha është një koncept themelor, dhe në shumicën e gjuhëve ekzistojnë mekanizma të integruar për të punuar me këtë lloj të dhënash. Duket se JS nuk është përjashtim, ekziston një tip Data i integruar, ka një bandë funksionesh në prototip, megjithatë ...

Kush është fajtor
Problemi i parë lind kur ju duhet të vendosni datën / orën në një zonë kohore tjetër nga UTC dhe lokale. Konstruktori Data nuk ka një parametër të tillë.

Data e Re (); Data e re (vlera); Data e re (dataString); Data e re (viti, muaji [, dita [, ora [, minuta [, sekonda [, milisekonda]]]]]);
Opsioni i vetëm ku mund të specifikoni një kompensim në krahasim me UTC është mënyra e tretë. Thirrja e konstruktorit në këtë format ju lejon të kaloni kompensimin si pjesë të vargut:

Data e Re ("Dielli 01 shkurt 1998 00:00:00 GMT + 0700")
Vargu pranohet në formatin RFC2822, i cili është shumë i papërshtatshëm dhe është i vështirë për tu futur manualisht. Almostshtë pothuajse e pamundur të marrësh një varg të tillë nga hyrja e përdoruesit. Nuk mund ta imagjinoj një person i cili do të pranonte të fuste një datë në këtë format.

Përkundër faktit që në Data mund të vendosni të gjitha parametrat veçmas për zonën orare UTC - kjo nuk e zgjidh problemin - zona kohore do të mbetet lokale. Por ky nuk është problemi i vetëm.

Kompensimi i UTC nuk është konstant. Ky është një funksion i datës, kohës (ose nga një vulë kohore, nëse dëshironi) dhe, përsëri, një zonë kohore. Për shembull, për Moskën, përkthimi për herë të fundit jep:

Data e Re (2014, 9, 25, 0, 0, 0); // 26.10.2014, 21:00:00 GMT + 3 Data e Re (2014, 9, 27, 0, 0, 0); // 25.10.2014, 22:00:00 GMT + 4
Kështu, konstruktori në opsionin e tretë bëhet praktikisht i padobishëm pasi që kompensimi duhet të dihet paraprakisht. Dhe, siç është thënë, nuk mund të merret kaq lehtë. E vetmja bibliotekë që hasa dhe përdor bazën e të dhënave të Olson për të llogaritur ndërrimet është zona kohore-JS. Problemi me përdorimin e kësaj biblioteke është se bibliotekat themelore (zgjedhësit e datave / orëve) nuk dinë asgjë për të dhe e përdorin në mënyrë aktive datën standarde brenda saj. Pjesa tjetër e bibliotekave që punojnë me objektin Date nuk i referohen qartë kësaj baze dhe nuk marrin azhurnime prej saj. (Më korrigjo në komente.)

Në aplikimet e biznesit, zonat kohore janë kuptimplota vetëm nëse specifikohet data dhe ora. Për shembull, nëse dita e punës fillon në 9:00, atëherë vështirë se prisni që kolegu juaj nga Vladivostok të fillojë të punojë në 15:00. Zonat kohore nuk duhet të merren parasysh dhe në këtë rast data duhet të shfaqet në UTC. Sidoqoftë, në rastin e ngjarjeve të rregullta që ndodhin në të njëjtën kohë në zona të ndryshme kohore, një zonë kohore është akoma e nevojshme. Për shembull, Scrum-i juaj ditor fillon në 10:00 për ju dhe në 13:00 për Novosibirsk. Nga rruga, ky është saktësisht ndryshimi midis GMT dhe UTC. UTC është koha pa kompensim dhe GMT është koha me kompensim 0. Më lejoni të shpjegoj me një shembull:

2014/12/31 20:59:59 GMT në zonën orare të Moskës duhet të duket si 31/12/2014 23:59:59 31/12/2014 20:59:59 UTC në zonën orare Moskë duhet të duket si 31/12/2014 20:59 : 59
Për shkak të kësaj aritmetike, ata janë kryesisht të hutuar. Fatkeqësisht, ky parametër është i hutuar në të gjithë vendin. Mungesa e një treguesi të drejtpërdrejtë të zonës kohore në JS interpretohet si një zonë lokale orare, dhe tregimi i UTC dhe GMT është ekuivalent.

Intl Munda, por nuk kam pse. Në veçanti, ekziston një parametër i tillë Zona kohore, por, pak më tej, standardi përcakton: Zona kohore për t'u përdorur. Vlera e vetme që implementimet duhet të njohin është "UTC". Aktualisht, përveç Chrome, asnjë shfletues tjetër nuk mbështet zonat kohore arbitrare.
Me interval kohor në SHS, gjithçka është vërtet e keqe - nuk ka asgjë të tillë në gjuhë. Nëse doni të bëni mirë, bëjeni vetë.

Çfarë të bëjmë
  • Opsioni 1.
    Mos përdorni një zonë arbitrare kohore. Opsioni i preferuar dhe, ndoshta, më pa dhimbje. Kjo është, ju keni vetëm zonën orare lokale dhe UTC. Për këto raste, të gjithë shfletuesit duket se kanë gjithçka, megjithëse jo shumë të përshtatshme. Për më tepër, zona kohore është caktuar globalisht për sistemin operativ dhe nuk është më e lehtë ta ndryshosh atë për një aplikacion specifik të uebit.
  • Opsioni 2.
    Nëse nevojiten zona arbitrare kohore, mos përdorni vulë kohore. Absolutisht. Ruani kohën në bankën e kursimeve në linjën RFC me zonën e kohës. Nuk jam i sigurt nëse kjo do të ndihmojë në mposhtjen e ndërrimeve të zonës kohore në një kuptim të shfletuesit, por të paktën Chrome është në dijeni të ndërrimeve të tilla.
  • Opsioni 3.
    Situatat janë të ndryshme dhe ndodh që koha të regjistrohet në bazën e të dhënave nga çdo pajisje. Kjo është, në formën e një vule kohore. Nuk ka ku të ekzekutohet, në mënyrë që të shfaqni saktë kohën, duhet të dini ose zonën kohore të pajisjes, ose zonën orare të përdoruesit, ose të dyja, dhe të llogarisni të gjitha ndërrimet dorë më dorë. Ju nuk mund të bëni pa përdorimin e bazës së Olson.
  • Duhet të ketë moralin e kësaj fabule, por nuk kam asgjë më shumë për të shtuar. Unë nuk shoh ndonjë përparim në hartimet e standardit ECMA, ndoshta nuk do të ketë ndonjë.

Në këtë mësim, ne do të prezantojmë objektin JavaScript Date dhe do të mësojmë se si ta përdorim atë në praktikë.

Krijimi i datës - 4 shembuj

Në JavaScript, krijimi i datës bëhet duke përdorur objektin Date. Objekti Date përfaqëson një pikë në boshtin e kohës dhe është krijuar për të ruajtur datën dhe kohën me saktësi milisekondash.

Shembuj të krijimit të një date në JavaScript.

1. Krijimi i datës dhe orës aktuale.

Merrni datën dhe kohën aktuale në JavaScript është bërë duke instantuar një objekt Date pa specifikuar parametrat:

// data aktuale (data dhe ora që ishte në kohën e krijimit të një shembulli të objektit Date në kompjuterin lokal të përdoruesit) var tani \u003d data e re (); // për shembull, shtypni datën aktuale në console console.log (tani);

Nëse duhet të merrni vetëm datën e sotme në formatin e vargut, mund të përdorni metodën toLocaleDateString:

Var tani \u003d Data e re (). ToLocaleDateString (); // 19.12.2019

Koha aktuale e përdoruesit mund të merret kështu:

Var tani \u003d Data e re (). ToLocaleTimeString (); // 11:02:48 var tani \u003d data e re (). ToLocaleTimeString (). Fetë (0, -3); // 11:02

Data dhe koha në formatin e vargut mund të merren si më poshtë:

Var tani \u003d Data e re (). ToLocaleString (); // 19.12.2019, 11:02:48

2. Krijimi i një date duke specifikuar numrin e milisekondave në objektin Date që nga 1 janari 1970 00:00:00 UTC.

// 1 vit (jo me shpejtësi të lartë) \u003d 365 * 24 * 60 * 60 * 1000 \u003d 31536000000 ms // për shembull, le të krijojmë datën 01/01/1971, 00:00:00 UTC: var date1 \u003d datë e re (3153600000000);

3. Krijimi i një date duke e specifikuar atë në një objekt Date si një varg.

Me këtë mundësi për krijimin e një date, JavaScript do të përpiqet të kuptojë vargun e kaluar në të dhe të formojë një datë të bazuar në të. Konvertimi i një vargu në një datë në JavaScript bëhet duke përdorur metodën Date.parse.

Për shembull:

// krijoni një datë të bazuar në një varg në formatin DD.MM.YY var date1 \u003d new Date ("05.11.19"); // krijoni një datë të bazuar në një varg në formatin YYYY-MM-DDThh: mm: ss.sss (T përdoret për të ndarë datën dhe kohën) var date2 \u003d new Date ("2015-02-24T21: 23"); // krijoni një datë të bazuar në një varg që tregon zonën kohore (formati YYYY-MM-DDThh: mm: ss.sss ± hh: mm): var date3 \u003d data e re ("2015-02-24T22: 02 + 03: 00") ;

4. Krijimi i një date duke specifikuar parametrat e mëposhtëm, të ndara me presje: viti (4 shifra), muaji (duke numëruar nga 0), dita (1..31), orë (0..23), minuta (0..59), sekonda (0..59), milisekonda (0. .999). Për më tepër, kërkohen vetëm dy parametrat e parë.

Një shembull i krijimit të një date vetëm me parametrat e kërkuar:

// data e krijimit 01.01.2015 (parametrat e papërcaktuar janë parazgjedhur të barabartë: numri - 01, orë - 00, minuta - 00, sekonda - 00, milisekonda - 000). var data1 \u003d Data e re (2015.01); // krijoni një datë më 01.24.2015, 21:23 var date2 \u003d datë e re (2015,01,24,21,23);

Shënim: Nëse duhet të vendosni datën dhe orën në UTC, mund të përdorni metodën Date.UTC.

// 1 shembull var data1 \u003d Data.UTC (2015,1,1); var data2 \u003d data e re (data1); alarm (data2.toUTCString ()); // shembulli i dytë var newDate \u003d data e re (Data.UTC (2015,1,1)); alarm (newDate.toUTCString ());

Marrja e përbërësve individualë të datës dhe orës

JavaScript përdor metodat e mëposhtme për të marrë përbërësit individualë të datës dhe orës:

  • getFullYear () - kthen një vit me 4 shifra;
  • getMonth () - kthen muajin në formatin e një numri nga 0 në 11 (0 - janar, 1 - shkurt, 2 - mars, ..., 11 - dhjetor);
  • getDate () - kthen ditën e muajit nga 1 në 31;
  • getHours () - kthen numrin e orëve nga 0 në 23;
  • getMinutes () - kthen numrin e minutave nga 0 në 59;
  • getSeconds () - kthen numrin e sekondave nga 0 në 59;
  • getMilliseconds () - Kthen numrin e milisekondave nga 0 në 999.

Të gjitha këto metoda kthehen komponentë të veçantë të datës dhe kohës në përputhje me zonën kohore të vendosur në pajisjen lokale të përdoruesit.

// krijoni datën 11/11/2019 00:00 UTC var newDate \u003d data e re (Data.UTC (2019,11,11)); // merrni komponentët e datës nëse koha lokale në pajisjen e përdoruesit është UTC + 10: 00 newDate.getFullYear (); // 2019 newDate.getMonth (); // 10 newDate.getDate (); // 11 newDate.getHours (); // 10 newDate.getMinutes (); // 0 newDate.getSeconds (); // 0 newDate.getMilliseconds (); // 0

Një shembull në të cilin ne do të përshëndesim përdoruesin në varësi të intervalit kohor që ai ka aktualisht:

// merrni kohën aktuale të përdoruesit dhe përbërësit e kësaj kohe var tani \u003d Data e re (), ora \u003d tani.getHours (), minuta \u003d tani.getMinutes (), e dyta \u003d tani.getSeconds (), mesazhi \u003d ""; // përcaktoni një frazë përshëndetëse bazuar në kohën lokale të përdoruesit nëse (orë)<= 6) { message = "Доброе время суток"; } else if (hour <= 12) { message = "Доброе утро"; } else if (hour <= 18) { message = "Добрый день"; } else { message = "Добрый вечер"; } // выполним форматирование времени с использованием тернарного оператора minute = (minute < 10) ? "0" + minute: minute; second = (second < 10) ? "0" + second: second; hour = (hour < 10) ? "0" + hour: hour; message += ", сейчас " + hour + ":" + minute + ":" + second; // выведем приветствие и время в консоль console.log(message); // Добрый вечер, сейчас 22:50:39

Në këtë shembull, koha shfaqet në formatin e dëshiruar duke përdorur operatorin ternary.

JavaScript ka analoge për këto metoda për marrjen e përbërësve individualë të datës dhe orës për zonën kohore UTC + 0. Këto metoda emërtohen në mënyrë të ngjashme, por me "UTC" të shtuar pas "get": getUTCFullYear (), getUTCMonth (), getUTCDate (), getUTCHours (), getUTCMinutes (), getUTCSeconds (), getMilliseconds ().

Ditën e javës mund ta merrni në JavaScript duke përdorur metodën getDay ().

Kjo metodë kthen një numër nga 0 në 6 (0 - E Diel, 1 - E Hënë, ..., 6 - E Shtunë).

Një shembull në të cilin ne e shndërrojmë ditën e javës nga përfaqësimi numerik në vargun:

Var ditë \u003d ["E diela", "E hënë", "E martë", "E mërkurë", "E enjte", "E premte", "E shtunë"]; // merrni datën aktuale var tani \u003d Data e re (); // shtypni ditën e javës në console console.log ("Sot" + ditë);

Ju mund të merrni numrin e milisekondave që kanë kaluar që nga 01/01/1970 00:00:00 UTC në JavaScript duke përdorur metodën getTime ().

Ju mund të mësoni ndryshimin (në minuta) midis zonës kohore të pajisjes lokale dhe UTC në JavaScript duke përdorur metodën getTimezoneOffset ().

Vendosja e përbërësve individualë të datës dhe orës

Në JavaScript, mund të vendosni përbërës individualë të datës dhe orës duke përdorur metodat e mëposhtme në objektin Data:

  • setFullYear (viti [, muaji, data]) - vendosja e vitit (përveç kësaj, mund të caktoni një muaj dhe ditë tjetër);
  • setMonth (muaji [, data]) - caktimi i muajit nga 0 në 11 (0 - janar, 1 - shkurt, 2 - mars, ..., 11 - dhjetor); përveç kësaj, kjo metodë gjithashtu ju lejon të vendosni numrin;
  • setDate (data) - caktimi i numrit;
  • setHours (orë [, min, sek, ms]) - përcakton orën nga 0 në 23 (mund të vendosni edhe minuta, sekonda dhe milisekonda);
  • setMinutes (min [,) - përcakton minuta nga 0 në 59 (mund të vendosni shtesë sekonda dhe milisekonda);
  • setSeconds (sek,) - vendos sekonda nga 0 në 59 (përveç kësaj, mund të vendosni më shumë milisekonda);
  • setMilisekonda (ms) - Vendos milisekonda (0 deri në 999).

Të gjitha këto metoda janë krijuar për të vendosur datën dhe kohën në zonën kohore të vendosur në kompjuterin e përdoruesit.

// krijoni një shembull të një objekti Date që përmban datën aktuale var newDate \u003d new Date (); // vendosni vitin newDate.setFullYear (2019); // caktoni vitin dhe muajin newDate.setFullYear (2019, 08); // vendosur 20.09.2019 newDate.setFullYear (2019, 08, 20); // caktoni muajin newDate.setMonth (05); // cakto muajin dhe ditën newDate.setMonth (05, 15); // vendosni numrin newDate.setDate (28); // caktoni orën newDate.setHours (13); // caktoni orën dhe minutat newDate.setHours (13,20);

Në JavaScript, vendosja e datës dhe orës në zonën kohore UTC + 0 bëhet duke përdorur metodat e mëposhtme: setUTCFullYear (), setUTCMonth (), setUTCDate (), setUTCHours (), setUTCMinutes (), setUTCSecondes (), setUTCMilliseconds ().

Vendosja e datës dhe orës duke përdorur numrin e milisekondave që nga 01/01/1970 00:00:00 UTC bëhet duke përdorur dhe më pas vendosniTime ().

Për më tepër, në JavaScript, specifikimi i komponentëve të datës dhe orës së pasaktë nuk çon në gabime, ato thjesht shpërndahen automatikisht midis pjesës tjetër.

Për shembull:

// numri 44 do të shpërndahet si më poshtë: 44 - 31 \u003d 13, 13 Shkurt 2019 newDate.setFullYear (2019, 01, 44);

Kjo teknikë mund të përdoret kur duhet të merrni një datë që ndryshon nga ajo e dhënë për një periudhë të caktuar kohe.

// data që do të jetë 7 ditë më e madhe se newDate newDate.setDate (data1.getDate () + 7); // data që do të jetë më pak se newDate me 120 sekonda newDate.setSeconds (data1.getSeconds () - 120); // në këtë mënyrë mund të caktoni ditën e fundit të muajit paraardhës për newDate newDate.setDate (0);

Data e konvertimit dhe formatimit të vargut

Në JavaScript, metodat për shndërrimin e një date në një varg mund të ndahen në 2 grupe.

Grupi i parë përfshin metoda që e bëjnë këtë ashtu siç është përcaktuar në shfletuesin: toString (), toDateString (), toTimeString (), toUTCString ().

Metoda toString () kthen përfaqësimin e plotë të datës, toDateString () - vetëm datën, nëTimeString () - vetëm kohën, toUTCString () - përfaqësimin e plotë të datës, por në zonën kohore UTC + 0.

Sepse paraqitjet e vargut që këto metoda duhet të kthejnë nuk janë të përcaktuara qartë në standard, ato mund të ndryshojnë në shfletues të ndryshëm.

Tek grupi i dytë metodat mund të caktohen duke marrë parasysh zonën kohore dhe gjuhën e kompjuterit lokal: toLocaleString () - data dhe ora, toLocaleDateString () - vetëm data, toLocaleTimeString () - vetëm koha.

Metodat toLocaleString (), toLocaleDateString (), toLocaleTimeString () kanë 2 parametra opsionalë. Parametri i parë është për specifikimin e qartë të vendndodhjes, i dyti është për specifikimin e opsioneve të formatimit.

Nëse vendndodhja nuk është caktuar ose përcaktuar qartë, atëherë shfletuesi merr atë që ka si parazgjedhje.

Përveç kësaj, JavaScript gjithashtu ka një metodë toISOString (). Kthen një varg që përmban datën dhe kohën në formatin ISO (YYYY-MM-DDTHH: mm: ss.sssZ).

// krijoni datën 15.04.2019 18:43:59 (në zonën orare të përdoruesit) var newDate \u003d new Date (2019, 03, 15, 18, 43, 59); console.log (newDate.toString ()); // 15 Prill 2019 18:43:59 GMT + 1000 (koha standarde e Vladivostok) console.log (newDate.toDateString ()); // Mon Prill 15 2019 console.log (newDate.toTimeString ()); // 18:43:59 GMT + 1000 (Vladivostok, koha standarde) console.log (newDate.toLocaleString ()); // 04/15/2019, 18:43:59 console.log (newDate.toLocaleDateString ()); // console.log 15/4/2019 (newDate.toLocaleTimeString ()); // 18:43:59 console.log (newDate.toUTCString ()); // E hënë, 15 prill 2019 08:43:59 GMT console.log (newDate.toISOString ()); // 2019-04-15T08: 43: 59.000Z

Metoda për të kthyer vargun deri më sot

JavaScript përdor metodën Date.parse () për të kthyer një varg në një datë. Kjo metodë mund të konvertojë një varg nëse është në përputhje me RFC2822 ose ISO 8601.

Në këtë mësim, merrni parasysh standardin ISO 8601, i cili kërkon që një varg të jetë në formatin vijues: YYYY-MM-DDThh: mm: ss.sssZ.

  • YYYY - vit me 4 shifra;
  • MM - një muaj me 2 shifra (01 \u003d janar, 02 \u003d shkurt, etj.);
  • DD - dita e muajit, e përbërë nga 2 shifra (01..31);
  • T - karakteri për ndarjen e datës dhe orës;
  • hh - numri i orëve (00..23);
  • mm - numri i minutave (00..59);
  • ss - numri i sekondave (00..59);
  • sss - numri i milisekondave (0..999);
  • Z është një karakter që do të thotë se koha specifikohet në formatin UTC. Nëse keni nevojë të vendosni zonën kohore në vend të UTC, atëherë shkronja "Z" duhet të zëvendësohet me vlerën + hh: mm ose -hh.mm.

Nëse vargu që përmban datën dhe kohën nuk është në format RFC2822 ose ISO 8601, atëherë metoda JavaScript Date.parse () përsëri mund ta konvertojë atë, por rezultati në këtë rast mund të jetë i paparashikueshëm.

Përshëndetje!
Unë shpesh duhet të punoj me të dhëna statistikore dhe ka shumë prej tyre që lidhen me data. Për më tepër, e njëjta datë mund të përdoret në faqe në formate të ndryshme (për shembull, e përshtatshme për një makinë dhe në një të përshtatshme për një person). Unë mendoj se shumica prej jush janë krejtësisht të vetëdijshëm për të gjithë këtë kod të tmerrshëm që vjen me përdorimin e një objekti Date.
Për shembull, për të marrë datën aktuale në formatin DD.MM.VVVV, ne duhet të bëjmë sa vijon:
var d \u003d Data e re (), fd \u003d d.getDate () + "." + (d.getMonth () + 1) + "." + d.getFullYear ();
Dhe kur ka shumë linja të tilla? A është e lehtë të mbash mend se në javascript një muaj fillon nga e para kur zhvillohesh jo vetëm në të? Apo fakti që ka milisekonda, jo sekonda, si pothuajse kudo në pjesën e prapme? Ju mund të zgjidhni disa nga detyrat me bibliotekën popullore Moment.js, por funksionon shumë ngadalë.
Biblioteka në fjalë zgjidh këto probleme.
Nëse jeni të interesuar, ju sugjeroj të lexoni këtë përmbledhje të vogël.

TempusJS është shumë sheqer sintaksor në objektin Date, kështu që është shumë i shpejtë. Sintaksa e bibliotekës në vetvete është mjaft e thjeshtë. Për shembull, mund të shkruani shembullin e mëparshëm si kjo:
var fd \u003d tempus (). format ("% d.% m.% Y");
Tani për shpejtësinë. Në spoiler, mund të shihni një krahasim të Tempus me Moment dhe formatimin e datës amtare (shih më lart):

Krahasimi i JS, MomentJS dhe TempusJS vendas

Ne marrim datën aktuale
JS vendase x 2,175,575 ops / sek ± 0,75% (96 ekzekutime të kampionuara) Momenti x 284,864 opsione / sek ± 0,85% (96 ekzekutime të kampionuara) Tempus x 2,086,081 opsione / sek ± 0,73% (97 ekzekutime të mostruara)
Formatimi
JS vendase x 1,637,517 opsione / sekonda 61 0,61% (100 vrapime të kampionuara) Momenti x 8,808 opsione / sekondë ± 1,07% (100 ekzekutime të kampionuara) Tempus x 942,815 opsione / sekonda 68 0,68% (94 ekzekutime të kampionuara)
Autodetektimi dhe analizimi i datës
JS origjinale x 11,204,316 ops / sek ± 0,81% (88 ekzekutime të kampionuara) Momenti x 38,511 ops / sek ± 1,41% (95 ekzekutime të kampionuara) Tempus x 93,973 opsione / sek ± 1,06% (85 ekzekutime të kampionuara)
Analizimi i një date sipas formatit
Momenti x 46.293 ops / sek ± 0.63% (100 ekzekutime të kampionuara) Tempus x 109.947 opsione / sek ± 0.93% (99 ekzekutime të kampionuara)
Analizimi dhe vërtetimi
Momenti x 44,588 opsione / sek ± 1,09% (90 ekzekutime të kampionuara) Tempus x 103,439 opsione / sekondë ± 0,90% (94 ekzekutime të mostruara)
Rezultatet u morën në laptopin tim në Google Chrome 30.0.1599.114. Në shfletuesit e tjerë, rezultatet ndryshojnë, por raporti mbetet përafërsisht i njëjtë.
Biblioteka benchmark.js u përdor për testet
Standardet për veçoritë e tjera, mund t'i shihni.

Pra, përparësitë e kësaj biblioteke mund të shkruhen si më poshtë:

  • Mbështet IE6 +, Chrome, Firefox, Opera;
  • Mbështet zinxhirët e thirrjeve;
  • Muajt \u200b\u200bmund të fillojnë me 1 (parazgjedhur) sesa me zero;
  • Milisekondat mund të çaktivizohen (parazgjedhur) ose të aktivizohen;
  • Punë e shpejtë (Meqenëse, në shumë raste, përdoret shfletuesi objekt origjinal Data, zbatimi i të cilit është shkruar në gjuhë më të shpejta);
  • Mbështet formatet dhe shtojcat e personalizuara
  • Vlerësimi i datës është shumë i shpejtë dhe varet vetëm nga funksionet që përcaktojnë datën (pasi që vërtetimi bëhet tashmë kur futen vlerat dhe nuk llogaritet veçmas);
  • Shumëgjuhëshe dhe autodetektimi i gjuhës së përdoruesit.

Këtu do të flasim vetëm për disa nga funksionet.

Formatimi dhe analizimi

Pra, për fillestarët, një shembull tjetër i formatimit të datës. Ne gjithashtu përdorim zinxhirimin e thirrjeve këtu. Në fund të secilit cilësim, ne rimarrim një objekt TempusDate që mund ta përdorim më tej në zinxhir. Shembull:
tempus (). // merrni datën e re calc ((muaji: -1)). // zvogëloni atë me formatin një muaj ("% d.% m.% Y"); // Dalja si varg
Kështu, kemi të njëjtën ditë, orë dhe sekondë, por një muaj më parë. Kjo është e dobishme për marrjen e raporteve për muajin e fundit.

Shembulli tjetër është analizimi i një date.
// Kthen një objekt TempusDate me datën "2013-11-18" tempus ("11/18/2013"); // Kthen një objekt të TempusDate me datën "2013-12-12" tempus ("2013-12-12", "% Y-% m-% d");
Tempus mund të zbulojë automatikisht disa formate të njohura. Gjithashtu, mund të specifikoni një format të caktuar, atëherë analizimi do të jetë më i shpejtë. Plus, mund të caktoni datën që do të kthehet nëse dështon analizimi:
// Sepse "123" nuk përputhet me formatin "% d.% M.% Y", atëherë // një objekt që përmban datën 2013-01-01 do të kthehet tempus ("123", "% d.% M.% Y", tempus ());
Lista e formateve të parazgjedhura mund të shikohet

Tani le të ndryshojmë formatin e datës së formatuar tashmë
// tempusi "2013-11-05" ("05.11.2013"). Formati ("% Y-% m-% d"); // Ose kështu // tempusi "" Tetor, 12 "(" 2013-10-12 12:31:01 ","% Y-% m-% d% H:% M:% S "). Formati ("% B,% d ");

Gjithashtu, mund të përdorni lokalizimin për formatim. Si parazgjedhje, gjuha e përdoruesit do të zgjidhet (merret nga shfletuesi) ose gjuha e paracaktuar nëse gjuha e përdoruesit nuk gjendet midis gjuhëve të disponueshme Tempus.
// Vendosni gjuhën tempus.lang ("ru"); // Si parazgjedhje ne përdorim formatin // "05 Nëntori" tempus (1383609600) .formati ("% B,% d");
Për momentin, ka vetëm dy gjuhë - ruse dhe angleze, kështu që unë do të jem i gatshëm t'ju ndihmoj.

Vlerësimi

Validimi i datës është si më poshtë:
// Kthen tempusin false ("08/32/2013", "% d.% M.% Y"). E vlefshme (); // Kthen tempusin e vërtetë ("00:00 01.01.2012", "% H:% M% d.% M.% Y"). E vlefshme ();

Në rast të një gabimi, ju mund të shikoni në fushat në të cilat ka ndodhur - kudo që vlera nuk është e gabuar:
// Kthimet ("viti": - 5, "muaji": false, "dita": false, "orë": false, // "minuta": false, "sekonda": false, "milisekonda": false) tempus (). viti (-5). // vendosni vitin \u003d -5, d.m.th. gabime të pavlefshme (); // merrni objektin me gabime

Diapazonet e datave

Ndonjëherë duhet të marrim numrin e viteve (për shembull, moshën), muajt, ditët, etj. midis dy datave. Për ta bërë këtë, ne mund të përdorim metodën midis, e cila gjen ndryshimin midis dy datave dhe kthimeve në formatin e dëshiruar ("viti", "muaji", "dita", "orët", "minutat", "sekondat", "milisekonda").
Këtu keni një shembull të thjeshtë për të marrë numrin e muajve midis 1 nëntorit 2013 dhe 5 maj 2014:
// Kthen 6 tempus (). Midis (tempus (), "muaji");
Ose sa orë kanë mbetur deri në vitin e ri
tempus (). ndërmjet (tempus (), "orë");
Në shembullin e fundit, ju mund të shihni se unë specifikova vetëm vitin. Kur vendosni një vlerë në një grup ose objekt, vlerat që mungojnë do të jenë
e mbushur me minimumin. Ju mund të shihni listën e konstanteve me vlera minimale në dokumentacion.

Gjithashtu, ne mund të ndryshojmë çdo datë duke përdorur funksionin calc:
// Kthen një TempusDate me datën 2012-01-01 tempus (). Calc ((viti: 1, muaji: -4, dita: -1));

Formatet e personalizuara

Ne aplikojmë formatin tonë për muajin, i cili mund të marrë vlera nga 1 në 12 (dhe jo nga 01 në 12):
// Regjistroni një format të ri tempus.registerFormat ("% q", // direktiva -% q funksion (data) (// Këtu specifikojmë funksionin e formatimit, d.m.th. çfarë do të zëvendësohet me% q data e kthimit.muaj ();) , funksioni (vlera) (// Dhe këtu është funksioni i analizimit var v \u003d Numri (vlera); kthimi (muaji: (isNaN (v)? i papërcaktuar: v));), 1, // Gjatësia minimale që mund të marrë vlera 2 , // Gjatësia maksimale "numri" // Lloji); // Testimi // Kthimet "01.1.2013"; tempus ((viti: 2013, muaji: 1, dita: 1)). formati ("% d.% q.% Y"); // Kthimet ("viti": 2013, "muaji": 2, "dita": 10, "orë": 0, "minuta": 0, "sekonda": 0); tempus ("10.2.2013", "% d.% q.% Y"). merrni ();
Kur regjistroheni, do të vini re se disa parametra janë vendosur veçmas, ndërsa një shprehje e rregullt mund të përdoret. Në fakt, fillimisht ishte atje, por pasi e braktisi atë, shpejtësia u rrit disa dhjetëra herë.
Nëse keni nevojë të hiqni një format, atëherë përdorni çregjistrimin Formati:
tempus.regjistrohuFormat ("% d"); // Kthimi "% d.01.2013", sepse direktiva% d nuk ekziston më. tempus.format ((viti: 2013, muaji: 1, dita: 1), "% d.% m.% Y");

Marrësit / përcaktuesit

Mund të merrni / caktoni disa vlera duke përdorur funksionet vit (), muaj (), ditë (), orë (), minuta (), sekonda (), milisekonda (), dayOfWeek (), utc (), timestamp () ose vendosur (). Për shembull:
tempus (). // Merrni datën aktuale të vitit (1900). // Lëreni ashtu siç është, por vendoseni në 1900 brishtëYear (); // Kontrolloni nëse është një vit i brishtë, në këtë rast tempus false (). Viti (); // Dhe kështu e marrim vitin aktual në formë numerike

Gjenerimi i datave

Ju mund të krijoni një datë në shumë mënyra, lista e plotë e parametrave është në dokumentacion. Këtu është një shembull minimal.
// kthimet ["29.03.2013", "30.03.2013", "31.03.2013", "04/01/2013", "04/02/2013"]; tempus.generate ((dataFrom: "20130329", formatFrom: "% Y.% m.% d", dataTo: "20130402", periudha: (dita: 1), format: "% d.% m.% Y" ));
Kjo mund të jetë e dobishme për shfaqjen e diagrameve sipas datës dhe ndryshimin e formatit të shfaqjes direkt në klient, pa bërë kërkesa për pjesën e prapme. Data mund të gjenerohet si si një grup ashtu edhe si objekt, ku datat do të jenë çelësat (kjo është e dobishme kur duhet të lidhim një ngjarje me një datë, për shembull, kur po bëjmë kalendarin tonë). Gjithashtu, datat mund të grupohen sipas ditës, javës, muajit, orës, vitit - sido që të jetë. Kjo gjithashtu mund të zbatohet në kalendar.

Shtojca

Dhe e fundit, por jo më pak e rëndësishmja, shtojcat. Këtu po zgjerojmë fabrikën për të gjeneruar një datë të rastësishme. Gjithashtu, na duhet klasa TempusDate, e cila mund të gjendet në tempus.classes (). Ja një shembull shtesë:
(funksioni (tempus) (var TempusDate \u003d tempus.classes ("TempusDate"); tempus.randomDate \u003d funksioni) tempus.MAX_YEAR - tempus.MIN_YEAR)) + tempus.MIN_YEAR)). muaj (Math.floor ((Math.random () * (tempus.MAX_MONTH - tempus.MIN_MONTH)) + tempus.MIN_MONTH)) .ditë (Math. kati ((Math.random () * (data.dayCount () - tempus.MIN_DAY)) + tempus.MIN_DAY)). orë (Math.floor ((Math.random () *) (tempus.MAX_HOURS - tempus.MIN_HOURS) ) + tempus.MIN_HOURS)). minuta (Math.floor ((Math.random () * (tempus.MAX_MINUTES - tempus.MIN_MINUTES)) + tempus.MIN_MINUTES)). sekonda (Math.floor ((Math.random () * (tempus.MAX_SECONDS - tempus.MIN_SECONDS)) + tempus.MIN_SECONDS)); data e kthimit;);)) (tempus); // Tani mund të krijojmë data si më poshtë var someRandomDate \u003d tempus.randomDate ();
Unë mendoj se në këtë mënyrë do të jetë e mundur të shkruhen lehtësisht widget duke përdorur jQuery + Tempus, Angular + Tempus, etj.

Kodet burimore

Mund të instaloni duke shkarkuar burimet nga github:
https://github.com/crusat/tempus-js/releases
Ose përmes bower:
$ bower instaloni tempus
Ju duhet vetëm një skedar - tempus.js ose tempus.min.js.

Shpresoj që kjo bibliotekë të jetë e dobishme dhe gjithashtu do të ishte interesante të dihet se çfarë i mungon asaj në mënyrë që të zhvillohet më tej biblioteka në drejtimin e duhur. Faleminderit per vemendjen!
P.S. Faleminderit per ftesen!

Përdorni Date të re () për të krijuar një objekt të ri Date që përmban datën dhe kohën aktuale.

vini re se Data () e thirrur pa argumente, është ekuivalente me Data e re (Data. tani ()) .

Pasi të keni një objekt data, mund të përdorni ndonjë nga disa metodat e mundshme për të marrë vetitë e tij (për shembull, getFullYear () për të marrë një vit me 4 shifra).

Më poshtë janë disa nga metodat e zakonshme të datave.

Merrni vitin aktual

var viti \u003d (data e re ()). getFullYear (); console.log (viti); // Dalja e mostrës: 2016

Merrni muajin aktual

var muaj \u003d (Data e re ()). getMonth (); tastierë.log (muaj); // Dalja e mostrës: 0

Vini re se 0 \u003d janar. Kjo sepse muajt variojnë nga 0 para 11 kështu që shpesh është e dëshirueshme që të shtohet +1 në indeks.

Merrni ditën aktuale

var ditë \u003d (Data e re ()). getDate (); tastierë.log (dita); // Dalja e mostrës: 31

Merr orën aktuale

orë var \u003d \u003d Data e re ()). getHours (); tastierë.log (orë); // Dalja e mostrës: 10

Merrni minutat aktuale

minuta var \u003d \u003d Data e re ()). getMinutes (); tastierë.log (minuta); // Dalja e mostrës: 39

Merrni sekondat aktuale

sekonda var \u003d (Data e re ()). getSeconds (); tastierë.log (e dyta); // Dalja e mostrës: 48

Merrni milisekondat aktuale

Për të marrë milisekondat (0 deri 999) të një instance të një objekti Date, përdorni metodën getMilliseconds.

Milisekonda të ndryshme \u003d (Data e re ()). GetMillisekonda (); tastierë.log (milisekonda); // Output: milisekonda tani

Shndërroni kohën dhe datën aktuale në një varg të lexueshëm nga njerëzit

var tani \u003d Data e re (); // konvertoni datën në një varg në formatin e zonës orare UTC: console.log (tani.toUTCString ()); // Rezultati: E Martë, 21 Qershor 2017 09:13:01 GMT

Metoda statike Date.now () kthen numrin e milisekondave që nga 1 janari 1970 00:00:00 UTC. Për të marrë numrin e milisekondave që nga ajo kohë duke përdorur një shembull të objektit Date, përdorni metodën e tij getTime.

// merrni milisekonda duke përdorur metodën statike tani të Date console.log (Date.now ()); // merrni milisekonda duke përdorur metodën getTime të datës instancë console.log ((Data e re ()). getTime ());