Kuinka saada tämän viikon Javascript

Tällä hetkellä työskentelen koodaavan käynnistyskampukseni loppuprojektini - Habit Tracker! Ja tässä tottumuksenseurannassa käyttäjä voi napsauttaa nykyisen viikon päivämäärää merkitäksesi tottumuksen “valmis”.

Joten - Kuinka saan nykyisen viikon päivämäärät? Oletetaan, että on lauantai ja käyttäjän tulisi nähdä päivämäärät maanantaista sunnuntaihin.

Harvinaisessa optimistisessa hetkessä googlisin ”javascript current week method”, toivoen löytäväni jotain ”date.currentWeek ()”.

Epäonnistua.

Näytti siltä, ​​että minun piti kirjoittaa Javascript-toiminto tyhjästä. Löysin mukavan StackOverflow-säiettä, joka auttoi minua löytämään ratkaisun. Ja matkalla opiskelin hienoja rakennettuja Javascript-päivämäärämenetelmiä.

Tämä tuo minut kohtaan. Kuinka usein olen kuullut siitä lähtien, kun käynnistin tämän käynnistyslevyn: "Sinun ei tarvitse keksiä pyörää uudelleen". Ihmiset ovat jo ratkaisseet monia ongelmia. Ei kannata viettää tunteja aivojen raivaamiseen keksimään omaa ratkaisua ja “ratkaisemaan” tämä asia. Paitsi että näet suuren hyödyn oppimiskäyrälläsi tällä tietyllä alueella. Muu kuin: vain google. Vain pinovirto.

Nyt sitä mennään. Tänään on lauantai. Tavoitteenani on luoda taulukko kaikista tämän viikon päivämääristä, maanantaista sunnuntaihin.

Meidän on saatava kuukauden päivä, selvitettävä viikonpäivä (tiistaina, keskiviikkona jne.), Vähennettävä maanantaille pääsemiseksi tarvittava numero ja luotava sitten uusi päivämäärä käyttämällä uutta laskettua päivää ja yhdistämällä se Tämä kuukausi. Aiomme käyttää Javascriptin sisäänrakennettuja menetelmiä: uusi päivämäärä, getDate, getDay ja setDate. Sain sen?

Vaikuttaa villiltä, ​​mutta sillä on enemmän järkeä, kun käymme läpi koodin.

Rivi 1 ”uusi päivämäärä”

=> Tämä antaa meille tämän päivän päivämäärän, eli ”la 12. elokuuta 2017 15:22:48 GMT-0400 (EDT)”

Rivi 5 “getDate ()”

=> Palauttaa kuukauden päivän, tässä tapauksessa “12”

Rivi 5 “getDay ()” => Tässä taika tapahtuu!

=> Palauttaa viikonpäivän.

=> Palautusarvo on kokonaisluku, missä sunnuntai = 0, maanantai = 1, tiistai = 2 jne.!

=> Meidän tapauksessamme se palauttaa 6 lauantaina

=> Tämän avulla voimme vähentää tämän palautusarvon tämän päivän kuukauden päivästä niin, että saamme maanantaina kuukauden päivän. Päästäksesi maanantaina vähennämme 6 + 1. Tarvitsemme +1 tai muuten laskeudumme sunnuntaina.

=> 12–6 + 1 = 7

=> 7. elokuuta on maanantai

=> BAM!

Sitten on vain kysymys siitä, että viikon jokaista päivää pidetään silmällä ja työnnät jokaisen päivämäärän viikon taulukkoon. Mutta meidän on myös uusittava päivämäärämme.

Rivi 6 “setDate ()”

=> asettaa päivämääräobjektin päivän suhteessa nykyisen kuukauden alkuun

=> Tarvitsemme tätä menetelmää todellisen päivämäärän rakentamiseksi. Toistaiseksi ensimmäinen on “7”, ja meidän on yhdistettävä se kuluvaan kuukauteen päästäksesi 7. elokuuta.

=> Palautusarvo on jotain outoa, kuten tämä: 1502134686498. Jos sinulla on mielenkiintoa. Tämä on millisekuntien lukumäärä 1. tammikuuta 1970 00:00:00 UTC ja annetun päivämäärän välillä.

=> Siksi meidän on käärittävä tämä ”uuteen päivämäärään” päästäksemme haluamaasi päivämäärämuotoon

=> uusi päivämäärä (1502134686498) palauttaa “Ma 7.7.2017 15:38:06 GMT-0400 (EDT)”

Olen käyttänyt joitain ylimääräisiä muotoiluja sovellukseni tarpeiden vuoksi.

Rivi 6 “toISOString ()”

=> palauttaa ”2017–07–07T19: 38: 06.498Z”

=> Ja koska tarvitsin vain päivämäärän ilman aikaa, viipaloin jousitukseni vastaavasti.

Ja tässä me menemme, viimeinen ”viikkoni” ryhmäni on valmis!

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

Phew, se oli mukava pieni aivojen kiusaaja! Sovellukselleni se ei päättynyt siihen. Koska minun on verrattava Javascript-päivämäärämerkkejä Rails-tietokannan Ruby-objekteihini, piti lisätä lisää tuloksia. Mutta tämä on aihe erilliselle blogiviestille ...