Muszę zwiększyć wartość daty o jeden dzień w JavaScript.
Na przykład mam wartość daty 2010-09-11 i muszę przechowywać datę następnego dnia w zmiennej JavaScript.
Jak mogę zwiększyć datę o jeden dzień?
javascript
date
datetime
Santanu
źródło
źródło
Odpowiedzi:
Trzy opcje dla Ciebie:
1. Używając tylko
Date
obiektu JavaScript (bez bibliotek):Moja poprzednia odpowiedź na nr 1 była błędna (dodała 24 godziny, nie biorąc pod uwagę przejścia na czas letni i zimowy; Clever Human zwrócił uwagę, że zakończy się niepowodzeniem z 7 listopada 2010 r. We wschodniej strefie czasowej). Zamiast tego odpowiedź Jigara to właściwy sposób na zrobienie tego bez biblioteki:
Działa to nawet w ostatnim dniu miesiąca (lub roku), ponieważ obiekt daty JavaScript ma sprytne podejście do najazdu:
Pokaż fragment kodu
(Ta odpowiedź jest obecnie akceptowana, więc nie mogę jej usunąć. Zanim została zaakceptowana, zasugerowałem PO, że akceptują odpowiedź Jigara, ale być może zaakceptowali tę odpowiedź dla pozycji 2 lub 3 na liście).
2. Korzystanie z MomentJS :
(Uwaga:
add
modyfikuje instancję, do której ją wywołujesz, zamiast zwracać nową instancję, więctoday.add(1, 'days')
zmodyfikujetoday
to. Dlatego zaczynamy od klonowaniavar tomorrow = ...
).3. Używanie DateJS , ale nie był aktualizowany od dłuższego czasu:
źródło
Date
konstruktora (new Date(year, month, date)
); patrz sekcja 15.9.2.1 specyfikacji ; jeśli chcesz zaakceptować szereg formatów, zdecydowanie spójrz na DateJS .Date.parse
(który zwraca liczbę milisekund, które możesz następnie przesłaćnew Date(ms)
). Ale uwaga, może różnić się w zależności od przeglądarki. Do niedawna wdrożenia mogły robić wszystko, co tylko chcieliDate.parse
. Nowa specyfikacja 5. edycji ma teraz minimalny format, który należy zaakceptować, ale na to jeszcze nie liczyłem.x = new Date(); x2 = new Date(x.getTime() + 1000)
, gdzie 1000 to przyrost milisekundowy.Date
obiekty są zmienne. Trzy razy przechowujesz ten samDate
obiekt w tablicy. Jeśli chcesz trzy różneDate
obiekty, musisz utworzyć trzy obiekty:var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
źródło
new Date("2009-09-11")
ale Firefox nie. Myślę, że większość przeglądarek akceptuje,new Date("2009/09/11")
więc byłoby to łatwe rozwiązanievar arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
.-
go/
i nadzieja, że przeglądarki go zaakceptują, byłoby podzielenie łańcucha na części:var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);
Zauważ, że używamym-1
tutaj, ponieważ miesiące javascript są wartościami wyliczanymi (styczeń to 0, a nie 1), ad+1
ponieważ wykonuję inkrementację już w początkowym zadaniu (poprawi się automatycznie na 29 lutego itd.)Żaden z przykładów w tej odpowiedzi wydaje się nie działać z dniami dostosowywania czasu letniego. W tych dniach liczba godzin w ciągu dnia nie wynosi 24 (są to 23 lub 25, w zależności od tego, czy „skaczesz do przodu”, czy „cofasz się”).
Poniższa funkcja AddDays javascript uwzględnia czas letni:
Oto testy, których użyłem do przetestowania funkcji:
źródło
Najprostszym sposobem jest konwersja do milisekund i dodanie 1000 * 60 * 60 * 24 milisekund, np .:
źródło
1000*60*60*24
xDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
ale tak naprawdę jest podobny dogetTime()
/setTime()
, naprawdę.new Date(Date.now()+1000*60*60*24);
Jutro w jednej linii w czystym JS, ale jest brzydka !
Oto wynik:
źródło
Najpierw musisz przeanalizować ciąg znaków, zanim zastosujesz się do sugestii innych osób:
Jeśli chcesz ponownie w tym samym formacie, musisz to zrobić „ręcznie”:
Ale sugeruję zdobycie Date.js, jak wspomniano w innych odpowiedziach, które pomogą ci dużo .
źródło
Uważam, że nic nie jest bezpieczniejsze niż
.getTime()
i.setTime()
, więc powinno to być najlepsze i wydajne..setDate()
z powodu nieprawidłowej daty (np. 31 + 1) jest zbyt niebezpieczne i zależy od implementacji przeglądarki.źródło
Zdobycie kolejnych 5 dni:
źródło
Dwie metody:
1:
2: podobny do poprzedniej metody
źródło
Uzyskaj wartość ciągu daty za pomocą metody dateObj.toJSON () Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Pokrój datę ze zwróconego wartość, a następnie przyrost o żądaną liczbę dni.
źródło
Przykład
Wynik
źródło
Nie jestem całkowicie pewien, czy jest to BŁĄD (przetestowany Firefox 32.0.3 i Chrome 38.0.2125.101), ale następujący kod nie zadziała w Brazylii (-3 GMT):
Wynik:
Dodanie jednej godziny do daty sprawi, że będzie działać idealnie (ale nie rozwiąże problemu).
Wynik:
źródło
Wynikiem jest ciąg reprezentujący jutrzejszą datę. Użyj new Date (), aby uzyskać dzisiejszą datę, dodając jeden dzień za pomocą Date.getDate () i Date.setDate () i przekonwertując obiekt Date na ciąg.
źródło
Inkrementacja roku daty za pomocą waniliowej js:
Na wypadek, gdyby ktoś chciał zwiększyć wartość inną niż data (dzień)
źródło
Za pośrednictwem natywnego JS, aby dodać jeden dzień, możesz wykonać następujące czynności:
Inną opcją jest użycie
moment
biblioteki:źródło
Przyrost dat świadomych stref czasowych / czasowych dla dat JavaScript:
źródło