Kuidas saada Javascripti praegune nädal

Praegu töötan oma kodeeriva alglaadimisplaadi - Habit Tracker - projektiga. Ja sellel harjumuse jälgijal on kasutajal võimalik klõpsata jooksva nädala kuupäevale, et märkida harjumus “valmis”.

Niisiis - kuidas saada jooksva nädala kuupäevi? Oletame, et on laupäev ja kasutaja peaks nägema kuupäevi esmaspäevast pühapäevani.

Harva optimistliku hetkega googeldasin “javascripti jooksva nädala meetodit”, lootes, et leian midagi sellist nagu “date.currentWeek ()”.

Ebaõnnestumine.

Tundus, et pidin kirjutama Javascripti funktsiooni nullist. Leidsin kena StackOverflow lõime, mis aitas mul lahendust leida. Ja teel õppisin mõnda lahedat sisseehitatud Javascripti kuupäevameetodit.

See viib mind asja juurde. Kui sageli olen sellest alglaadimislaagri käivitamisest kuulnud: “Te ei pea ratast leiutama”. On palju probleeme, mille inimesed on juba lahendanud. Ei ole mõtet kulutada tunde aju raputades, et tulla välja oma lahendus ja "lahendada" see küsimus. Välja arvatud see, et näete selles valdkonnas oma õppimiskõverale suurt kasu. Muud kui see: lihtsalt google. Lihtsalt virnavool.

Siin me läheme. Täna on laupäev. Minu eesmärk on luua massiiv kõigist selle praeguse nädala kuupäevadest, esmaspäevast pühapäevani.

Peame saama kuu päeva, leidma nädalapäeva (teisipäev, kolmapäev jne), lahutama esmaspäevaks vajamineva arvu ja seejärel looma uue kuupäeva, kasutades uut arvutatud päeva, ja ühendama selle Käesolev kuu. Kasutame Javascripti sisseehitatud meetodeid: uus kuupäev, getDate, getDay ja setDate. Sain aru?

See tundub metsik, kuid koodist läbi minnes on see mõttekam.

1. rida „uus kuupäev”

=> See annab meile tänase kuupäeva, s.o “La 12. august 2017 15:22:48 GMT-0400 (EDT)”

5. rida „getDate ()”

=> Tagastab kuu päeva, antud juhul “12”

5. rida “getDay ()” => Siin toimub maagia!

=> Tagastab nädalapäeva.

=> Tagastatav väärtus on täisarv, kus pühapäev = 0, esmaspäev = 1, teisipäev = 2 jne!

=> Meie puhul naaseb laupäevaks 6

=> See võimaldab meil selle tulu väärtuse kuu tänasest päevast lahutada, nii et saame esmaspäevase kuupäeva. Esmaspäevani jõudmiseks lahutame 6 + 1. Vajame +1 või muud, kuhu maanduda pühapäeval.

=> 12–6 + 1 = 7

=> 7. august on esmaspäev

=> BAM!

Siis on vaja ainult arvestada iga nädalapäevaga ja lükata iga kuupäev minu nädala massiivi. Kuid peame ka oma kuupäeva rekonstrueerima.

6. rida „setDate ()”

=> seab objekti kuupäeva kuupäeva praegu määratud kuu algusega

=> Vajame seda meetodit oma tegeliku kuupäeva konstrueerimiseks. Siiani on esimene number “7” ja 7. augustile pääsemiseks peame selle ühendama praeguse kuuga.

=> Tagastatav väärtus on midagi imelikku, näiteks 1502134686498. Juhul kui teil on huvi. See on millisekundite arv vahemikus 1. jaanuar 1970 00:00:00 UTC kuni antud kuupäev.

=> Seetõttu peame soovitud kuupäevavormingusse jõudmiseks pakkima seda uude kuupäeva

=> uus kuupäev (1502134686498) tagastab teate “esmaspäev 7. august 2017 15:38:06 GMT-0400 (EDT)”

Olen oma rakenduse vajaduste tõttu kasutanud mõnda täiendavat vormingut.

6. rida “toISOString ()”

=> tagastab numbri “2017–08–07T19: 38: 06.498Z”

=> Ja kuna mul oli vaja ainult kuupäeva ilma kellaajata, siis viilutasin oma stringi vastavalt.

Ja siin me läheme, minu viimane “nädala” massiiv on tehtud!

=> [“2017–08–07”, “2017–08–08”, “2017–08–09”, “2017–08–10”, “2017–08–11”, “2017–08–12” , “2017–08–13”]

Phew, see oli kena väike ajutegu! Minu rakenduse jaoks see sellega ei lõppenud. Kuna mul on vaja Javascripti kuupäevajadasid võrrelda Rails'i andmebaasis olevate Ruby objektidega, tuli lisada veel konversioone. Kuid see on eraldi blogipostituse teema…