Mai mult
Adăugați zile de la Data JavaScript
Cum de a adăuga zile la curent "Data" folosind JavaScript. Nu JavaScript au o construit în funcție de ca .Net's AddDay
?
974
42
Puteți crea unul cu:-
Aceasta are grijă de automat incrementarea lună, dacă este necesar. De exemplu:
8/31 + 1 zi va deveni 9/1.
Problema cu folosirea
setDate
direct este ca's un mutator și că un fel de lucru este cel mai bine evitată. ECMA de cuviință să trateze "Data" ca un mutabil clasa, mai degrabă decât o imuabil structura.Răspuns Corect:
Răspuns Incorect:
Acest răspuns uneori oferă rezultatul corect dar de foarte multe ori se întoarce greșit an și o lună. Singura dată când acest răspuns este ca atunci când data la care sunteți adăugarea de zile pentru a se întâmplă să aibă actualul an și o lună.
Dovada / Exemplu
[Bifați această JsFiddle][1]
Fii atent, pentru că acest lucru poate fi dificil. Când setarea "de maine", funcționează doar pentru că's valoarea curentă meciuri anul și luna pentru "astazi". Cu toate acestea, la o întâlnire de genul "32" în mod normal, va funcționa în continuare bine pentru a trece la luna următoare.
Mea simplă soluție este:
această soluție nu are o problemă cu lumina zilei de economisire de timp. De asemenea, se poate adăuga/sub orice offset de ani, luni, zile etc.
este codul corect.
Aceste răspunsuri se pare confuz pentru mine, eu prefer:
getTime() ne oferă câteva milisecunde din 1970, și 86400000 este numărul de milisecunde într-o zi. Prin urmare, ms conține milisecunde pentru data dorită.
Folosind milisecundă constructorul dă data dorită obiect.
Încercați
Folosind setDate() pentru a adăuga o dată obiceiul de a rezolva problema, încercați să adăugați câteva zile la o luna Feb, dacă încercați să adăugați nouă zile la ea, nu se va duce la ceea ce v-ați așteptat.
Doar petrecut o grămadă de timp încercând să dau seama ce afacere a fost cu an adăugarea când în urma duce exemplele de mai jos.
Dacă doriți să adăugați pur și simplu n zile de la data te-ai sunt cele mai bune pentru a merge doar:
sau întortocheat versiune
Azi/maine lucrurile sunt confuze. Prin setarea datei curente în noua data variabilă va strica an valoare. daca lucrezi de la data inițială-ai câștigat't.
Dacă puteți, folosiți moment.js. JavaScript nu't foarte bine nativ data/ora metode. Următorul este un exemplu de Moment's sintaxa:
Referință: http://momentjs.com/docs/#/manipulating/add/
CodePen
Am creat aceste extensii de aseară: puteți trece, fie pozitive sau valori negative;
exemplu:
Cea mai simplă soluție.
Fără a utiliza cea de-a doua variabilă, puteți înlocui 7 cu următorul x zile:
Multumesc Jason pentru răspunsul dumneavoastră, care funcționează cum era de așteptat, aici este un mix de la cod și la îndemână format de AnthonyWJones :
Vechi știu, dar uneori îmi place asta:
Târziu la petrecere, <grevă>dar dacă utilizați "jQuery" apoi nu's un excelent plugin numit Moment:
http://momentjs.com/
http://momentjs.com/docs/#/manipulating/
Și o mulțime de alte lucruri bune acolo!
Edit: jQuery referință eliminate datorită aikeru's comentariu
Puteți utiliza JavaScript, nici jQuery necesare:
Eu folosesc ceva de genul:
Lucrează cu ziua de economisire de timp:
Funcționează cu noul an:
Acesta poate fi parametrizat:
Mozilla docs pentru setDate() nu't indică faptul că se va ocupa de sfârșitul lunii scenarii. A se vedea https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
setDate()
De aceea eu folosesc setTime (), atunci când am nevoie pentru a adăuga zile.
Nu, javascript nu are o construit în funcție, dar puteti folosi o simpla linie de cod
Cred că'll să dea un răspuns cât de bine:
Personal, îmi place să încercați pentru a evita gratuit declarare variabile, apeluri de metode, și apeluri constructor, ca toate sunt scumpe pe performanță. (în termen de motiv, desigur)
Am fost de gând să părăsească acest lucru ca doar comentarii în Răspunsul dat de @AnthonyWJones dar a crezut mai bine de ea.
Cele de mai sus va respect DST. Sensul dacă adăugați un număr de zile care trec DST, afișat timp (ore) se va schimba pentru a reflecta faptul că.
Exemplu:
2 Nov 2014 02:00 a fost sfârșitul de DST.
Daca're în căutarea de a păstra timp de peste DST (deci 10:30 va fi în continuare 10:30)...
Deci, acum aveți...