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>
-
<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>
-
<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.
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.
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.)