Biorąc pod uwagę dwa Date()
obiekty, z których jeden jest mniejszy od drugiego, jak codziennie wykonywać pętlę między datami?
for(loopDate = startDate; loopDate < endDate; loopDate += 1)
{
}
Czy taka pętla zadziała? Ale jak mogę dodać jeden dzień do licznika pętli?
Dzięki!
javascript
date
loops
Tom Gullen
źródło
źródło
Date.now()
podczas definiowanianow
?new Date()
domyślnie zwraca bieżącą datę jako obiekt . WywołanieDate
beznew
konstruktora daje po prostu ciąg Date, który i tak konwertujesz na obiekt Date?new Date(2012, 0, 1);
odebranie niewłaściwego dnia (dzień wcześniej),new Date(Date.UTC(2012, 0, 1))
działało dobrze.Na podstawie odpowiedzi Toma Gullena.
źródło
Date
jest globalnym deweloperemJeśli startDate i endDate są rzeczywiście obiektami daty, możesz przekonwertować je na liczbę milisekund od północy 1 stycznia 1970 roku, na przykład:
Następnie możesz zapętlać od jednej do drugiej, zwiększając loopTime o 86400000 (1000 * 60 * 60 * 24) - liczbę milisekund w ciągu jednego dnia:
źródło
86400000
kilka sekund. Ta pętla jest wrażliwa na zmiany czasu letniego i inne warunki brzegowe.Myślę, że znalazłem jeszcze prostszą odpowiedź, jeśli pozwolisz sobie na użycie Moment.js :
źródło
Tutaj prosty działający kod zadziałał dla mnie
źródło
źródło
Opierając się na odpowiedzi Tabare, musiałem na koniec dodać jeszcze jeden dzień, ponieważ cykl został wcześniej skrócony
źródło
Jeśli chcesz wydajnie pracować w milisekundach:
źródło
Załóżmy, że masz datę początkową i końcową z interfejsu użytkownika i zapisałeś je w zmiennej zakresu w kontrolerze.
Następnie zadeklaruj tablicę, która będzie resetowana przy każdym wywołaniu funkcji, aby przy następnym wywołaniu funkcji mogły zostać zapisane nowe dane.
var dayLabel = [];
Pamiętaj, aby użyć nowej daty (zmiennej początkowej), ponieważ jeśli nie użyjesz nowej daty i bezpośrednio przypiszesz ją do zmiennej, funkcja setDate zmieni pierwotną wartość zmiennej w każdej iteracji.
źródło
Na podstawie odpowiedzi Jayarjo:
źródło