Could someone please explain this to me. It is a weather app that shows 8 days forecast. I don’t understand starting from let today = , i understand newDate().getday() is going to give me a value between [0] and [6]. but then the +x part and the minus 7. How does this work?
for (x = 0; x < dailyForecast.length; x++) {
let day = dailyForecast[x];
**let today = new Date().getDay() + x;**
** if (today > 6) {**
** today = today - 7;**
** }**
I’ve edited your post for readability. When you enter a code block into a forum post, please precede it with a separate line of three backticks and follow it with a separate line of three backticks to make it easier to read.
You can also use the “preformatted text” tool in the editor (</>) to add backticks around text.
looks like +x adds 7 onto the current [daynumber]
So its new Date()getDay() !!which is today!!! then +x. Which adds 7 onto that value.
then to get today you have to minus the 7 again to get to the value. Now why am i getting an 8 days forecast and not 7?
today here is a misleading variable name. The new Date().getDay() is the objective today value, while x is how many days from today we’re looking.
Today is July 13 2021, the getDate() of today would return a 2. So today’s x would be 0, and today’s day index 2. Tomorrow’s x would be 1, and the day index would be today’s plus x, 2+1 or 3. And so on.
Now, on the 18th, x would be 5 (five days from today). Now today’s weekday index is still 2, so the index for the 18th is 2+5, or 7. But our weekdays can only be 0 to 6 inclusive, so we reduce the 7 by 7, causing the index to “wrap” back to 0.
On the 19th, x is 6 as we’re looking six days out. So that index would be 2+6… Which is still outside the range. So we reduce it by 7, bringing it’s day index to 1, for Monday.
If i were naming that variable, I’d change today to dayBeingForecast or something - make it explicit what the variable actually represents.
Thank you mate. That is exactly what i was looking for. The 2 +[0] was throwing me off. It seems the object itself has 8 weather days [0]-[7] and that why it must be making 8 days of forecast… Is there a way to only pull the first 7 days of the forecast. x = 0 ; x < dailyforecastLength//8//; x++
Or, if you knowyou only want 7 days of the 8, set the end condition of the loop explicitly - rather than using x < dailyForecast.length just use x < 7 in the for loop.