webForumDet fria alternativet

Loopa ut årets alla måndagar

ASP

3 svar · 730 visningar · startad av Bosse168

Medlem sedan nov. 20031 018 inlägg
Frågan#1

Hallå alla kodar genier. :)
Hur gör man för att loopa ut alla årets ALLA måndagar och skriva ut datumet i en lista? Typ:

Vill att det ska loopas ut så här:
vecka 10 - 8:e mars
vecka 11 - 15:e mars
vecka 12 - 22:e mars
osv.

eller kan man använda koden nedan och på något magiskt snyggt sätt hämta ut veckodatumet genom att bara använda veckonumret?

For i = 1 to 52
Response...
Next
Medlem sedan juli 20041 183 inlägg
#2

Det enda krångliga är att hålla reda på när första veckan startar. I Sverige är det den vecka som har minst 4 dagar på det nya året. 1-3 januari kan alltså vara v53. Efter det är det ju bara att addera 7 dagar i en loop.

Medlem sedan nov. 20031 018 inlägg
#3

ok, fattar fortfarande inte hur du menar. :/

Medlem sedan juli 20041 183 inlägg
#4

Hmm, krångligt att förklara så jag tar några exempel. Måndag vecka 1 och januari 2013 har datumet 31 december. Måndag vecka 1 under 2009 var den 29 december. Första måndagen 2009 tillhör därför vecka 2.

Alltså, vill du ha med måndag vecka 1 eller vill du ibland börja på vecka 2 eftersom första måndagen på året ibland är vecka 2?

Här kommer en kodsnutt som skriver ut datumet för alla veckornas måndagar ett visst år.

'----- If january 1st is first week
If DatePart("ww", currentDate, vbMonday, vbFirstFourDays) = 1 Then
	'----- Yes, loop backwards until we reach the monday of that week
	While DatePart("w", currentDate, vbMonday, vbFirstFourDays) <> 1
		currentDate = DateAdd("d", -1, currentDate)
	Wend
Else
	'----- No, loop forward until we reach the monday of the next week (first week)
	While DatePart("w", currentDate, vbMonday, vbFirstFourDays) <> 1
		currentDate = DateAdd("d", 1, currentDate)
	Wend
End If

'----- Loop weeks until new year
lastWeek = 0
While lastWeek < DatePart("ww", currentDate, vbMonday, vbFirstFourDays)
	lastWeek = DatePart("ww", currentDate, vbMonday, vbFirstFourDays)
	Response.Write("vecka " & DatePart("ww", currentDate, vbMonday, vbFirstFourDays) & " - " & Day(currentDate) & " " & MonthName(Month(currentDate), False) & "<br />")
	currentDate = DateAdd("ww", 1, currentDate)
Wend

Ex (2009):
vecka 1 - 29 december
vecka 2 - 5 januari
vecka 3 - 12 januari
vecka 4 - 19 januari

Om du bara vill ha årets dagar blir det något enklare kod

'----- Loop forward until we reach the monday of the next week (first week)
While DatePart("w", currentDate, vbMonday, vbFirstFourDays) <> 1
	currentDate = DateAdd("d", 1, currentDate)
Wend

'----- Loop weeks until new year
lastWeek = 0
While lastWeek < DatePart("ww", currentDate, vbMonday, vbFirstFourDays)
	lastWeek = DatePart("ww", currentDate, vbMonday, vbFirstFourDays)
	Response.Write("vecka " & DatePart("ww", currentDate, vbMonday, vbFirstFourDays) & " - " & Day(currentDate) & " " & MonthName(Month(currentDate), False) & "<br />")
	currentDate = DateAdd("ww", 1, currentDate)
Wend

Ex (2009):
vecka 2 - 5 januari
vecka 3 - 12 januari
vecka 4 - 19 januari
vecka 5 - 26 januari

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)