webForumDet fria alternativet

For loopar som fuinkar ibland

ASP

3 svar · 235 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Tja
Har en variabel som innehåller ett datum, i formen:

sStartDate = "2005-05-23"

Vidare så skriver jag ut några datumlistor m.h.a tre forloopar:

<td class="bTxt">
	<select name="sYear">
		<option value="foo">År</option>
		<%
		sYear = DatePart("YYYY", Date)
		eYear = Left(DateAdd("YYYY", 10, Date), 4)
		For i = sYear to eYear
			If Left(gStartDate, 4) = i Then
				Response.Write("<option value=""" & i & """ selected=""selected"">" & i & "</option>" & VbCrLf)
			Else
				Response.Write("<option value=""" & i & """>" & i & "</option>" & VbCrLf)
			End If
		Next
		i = 0
		%>
		</select>
		&nbsp;-&nbsp;
		<select name="sMon">
		<option value="foo">Månad</option>
		<%
		For i = 1 to 12
			If i < cInt(10) Then i = "0" & i
			If Mid(gStartDate, 6, 2) = i Then
				Response.Write("<option value=""" & i & """ selected=""selected"">" & i & "</option>" & VbCrLf)
			Else
				Response.Write("<option value=""" & i & """>" & i & "</option>" & VbCrLf)
			End If
		Next
		i = 0
		%>
		</select>
		&nbsp;-&nbsp;
		<select name="sDay">
		<option value="foo">Dag</option>
		<%
		For i = 1 to 31
			If i < cInt(10) Then i = "0" & i
			If Right(gStartDate, 2) = i Then
				Response.Write("<option value=""" & i & """ selected=""selected"">" & i & "</option>" & VbCrLf)
			Else
				Response.Write("<option value=""" & i & """>" & i & "</option>" & VbCrLf)
			End If
		Next
		i = 0
		%>
		</select>
	</td>

Ovan har jag gjort för att "rätt" datum ska väljas i resp. select som standard, men problemet är att det bara funkar ibland.

"Månad" listan har funkar varje gång, men År resp. Dag funkar bara ibland.
Har testat att skriva ut gStartDate variabeln och dess delar som jag jämför i varje loop och det ser ut.

Så, nu undrar jag vad jag ska göra för att lösa det här.

Tack!

Medlem sedan okt. 2004502 inlägg
#2

I första loopen så jämför du resultatet från funktionen left med resultatet från funktionen datepart. Bara det känns bäddat för problem. Använd dig av datepart eller left - inte blanda båda.

Efter första loopen sätter du i=0, vilket är onödigt då du ändå ger i ett nytt värde i den andra loopen.

Den andra loopen är riktigt konstig. Först jämför du i, som är ett heltal med cInt(10) - du behöver inte konvertera ett heltal till ett heltal. Vad värre är att du sätter i till strängen "0". Därmed blir värdet på i helt fel och loopen körs förmodligen inte klart. Det känns som du tänkt använda två olika variabler men döpt dem till samma namn.

Använd dessutom DatePart istället för Mid, för ett bättre resultat.

Ungefär samma problem i den tredje loopen.

Medlem sedan juni 200032 967 inlägg
#3

Jag vill nog tillägga att man inte under några omständigheter ska använda left, mid eller andra strängfunktioner för att ta fram delar av ett datum. Vad händer om datumformatet inte är detsamma som när du skrev koden?

Använd de datumfunktioner som finns. Alltid.
(Det förutsätter givetvis att du hanterar datumen som just datum, och inte strängar.)

Medlem sedan feb. 20034 441 inlägg
#4

Tack
Ja just det, kan ju lika gärna använda DatePart() och variabeln gStartDate.

Ska prova när jag kommer hem.

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