09. oktober 2004 - 21:15Der er
11 kommentarer og 2 løsninger
Valideringsproblem for datoer
Hej
Jeg har lavet en webside i asp med VB-script, hvor jeg validerer nogle data som hentes fra en database. Websiden skal vise en oversigt over forskellige møder, som skal afholdes i den nærmeste fremtid. De to værdier, som hentes fra databasen og skal valideres er to datoer:
Dato for mødets afholdelse eks. 25-10-2004 Dato for sidste tilmelding eks. 14-10-2004
Disse to datoer skal så holdes op mode dags dato, og er datoen overskredet for sidste tilmelding, så forsvinder tilmeldingsknappen på formen. Hvis datoen overskrider datoen for mødets afholdelse, så forsvinder mødet helt fra listen og kan ses på en liste over gamle møder. Jeg har brugt følgende kode:
if (Moeder.Fields.Item("MødeDato").Value)>= date() and (Moeder.Fields.Item("SidsteTilmelding").Value) >= date() then response.write "Tilmeld dig dette møde" end if if (Moeder.Fields.Item("SidsteTilmelding").Value)< date() or (Moeder.Fields.Item("MødeDato").Value)< date() then response.write "Mødetilmelding er afsluttet" end if
Koden virker, men jeg forstår simpelthen ikke at følgende udtryk er FALSK:
if 09-10-2004 >= 09-10-2004 and 25-10-2004 >= 09-10-2004 then response.write "Tilmeld dig dette møde" end if
Dvs. selvom (09-10-2004 >= 09-10-2004) så bliver det i praksis fortolket som (08-10-2004 >= 09-10-2004), hvilket jo klart nok vil være falsk. Det er som om, at Moededato ikke bliver opfattet rigtigt, men som (Moededato - 1).
Forstår I overhovedet hvad jeg mener ? Jeg synes at det er mærkeligt at en sammenligning af to datoer ikke burde være ligetil.
Jeg har brugt denne funktion magen gang med succes:
Public Function AgeInYears(date1 As Date, date2 As Date) As Long AgeInYears = DateDiff("yyyy", date1, date2) If Format(date1, "mmdd") > Format(date2, "mmdd") Then AgeInYears = AgeInYears - 1 End If End Function
Du skal bare modificerer den så den passer til dit behov:)
Tak for svarene! Det har imidlertidigt vist sig, at jeg har overset følgende:
Når jeg oprette et møde sendes de to omtalte datoer til en MS Acces-database fra et tekstfelt på asp-siden. Hvis jeg skriver 09-10-2004, så oprettes det i databasen som 10-09-2004. Det er lidt underligt, for hvis jeg skriver 31-12-2004, så oprettes det rigtigt nok, som 31-12-2004 og altså ikke som 12-31-2004. Ifølge Dreamweavers wizard postes værdien fra feltet som en dato, men laver jeg det om til postning som tekst eksisterer det samme problem.
Så mit problem eksisterer stadig - desværre - blot i en lidt anden version.
VH
ING
Synes godt om
Slettet bruger
09. oktober 2004 - 22:53#4
Når du gemmer så sørg for at gemme som yyyy-mm-dd så er du sikker på at det er gemt rigtigt, det er faktisk ikke underligt for 09-10 og 10-09 er begge gyldige men 31-12 kan ikke skrives som 12-31 så der kan den godt finde ud af at gemme rigtigt.
1) Jeg kender ikke syntaksen for at kunne formatere en dato i ASP. 2) Jeg har vanskeligt ved at se, hvor i koden jeg skal bruge formaterings-funktionen, da dreamweavers kodning er noget mere kompliceret end hvad jeg vil kunne mønstre i ASP. De to tekstfelter til datoer har Name=Dato og Name=SidsteTilmelding. Kan du give et bud på hvor det skal smides ind. Jeg vedhæfter lige sourcekoden herunder:
Dim MM_editAction Dim MM_abortEdit Dim MM_editQuery Dim MM_editCmd
Dim MM_editConnection Dim MM_editTable Dim MM_editRedirectUrl Dim MM_editColumn Dim MM_recordId
Dim MM_fieldsStr Dim MM_columnsStr Dim MM_fields Dim MM_columns Dim MM_typeArray Dim MM_formVal Dim MM_delim Dim MM_altVal Dim MM_emptyVal Dim MM_i
MM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME")) If (Request.QueryString <> "") Then MM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString) End If
' boolean to abort record edit MM_abortEdit = false
' query string to execute MM_editQuery = "" %> <% ' *** Update Record: set variables
If (CStr(Request("MM_update")) = "form1" And CStr(Request("MM_recordId")) <> "") Then
' create the MM_fields and MM_columns arrays MM_fields = Split(MM_fieldsStr, "|") MM_columns = Split(MM_columnsStr, "|")
' set the form values For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2 MM_fields(MM_i+1) = CStr(Request.Form(MM_fields(MM_i))) Next
' append the query string to the redirect URL If (MM_editRedirectUrl <> "" And Request.QueryString <> "") Then If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0 And Request.QueryString <> "") Then MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString Else MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString End If End If
End If %> <% ' *** Update Record: construct a sql update statement and execute it
If (CStr(Request("MM_update")) <> "" And CStr(Request("MM_recordId")) <> "") Then
' create the sql update statement MM_editQuery = "update " & MM_editTable & " set " For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2 MM_formVal = MM_fields(MM_i+1) MM_typeArray = Split(MM_columns(MM_i+1),",") MM_delim = MM_typeArray(0) If (MM_delim = "none") Then MM_delim = "" MM_altVal = MM_typeArray(1) If (MM_altVal = "none") Then MM_altVal = "" MM_emptyVal = MM_typeArray(2) If (MM_emptyVal = "none") Then MM_emptyVal = "" If (MM_formVal = "") Then MM_formVal = MM_emptyVal Else If (MM_altVal <> "") Then MM_formVal = MM_altVal ElseIf (MM_delim = "'") Then ' escape quotes MM_formVal = "'" & Replace(MM_formVal,"'","''") & "'" Else MM_formVal = MM_delim + MM_formVal + MM_delim End If End If If (MM_i <> LBound(MM_fields)) Then MM_editQuery = MM_editQuery & "," End If MM_editQuery = MM_editQuery & MM_columns(MM_i) & " = " & MM_formVal Next MM_editQuery = MM_editQuery & " where " & MM_editColumn & " = " & MM_recordId
If (Not MM_abortEdit) Then ' execute the update Set MM_editCmd = Server.CreateObject("ADODB.Command") MM_editCmd.ActiveConnection = MM_editConnection MM_editCmd.CommandText = MM_editQuery MM_editCmd.Execute MM_editCmd.ActiveConnection.Close
If (MM_editRedirectUrl <> "") Then Response.Redirect(MM_editRedirectUrl) End If End If
End If %> <% Dim Moeder__MMColParam Moeder__MMColParam = "1" If (Request.QueryString("MoedeID") <> "") Then Moeder__MMColParam = Request.QueryString("MoedeID") End If %> <% Dim Moeder Dim Moeder_numRows
Men hvis du har en dato kan du formatere den med CDate, så hvis der er indtastet 01-02-2004 i en variabel Dato kan du sige CDate(Dato) den vil så formatere den korrekt.
Ellers kan du prøve at oprette et spørgsmål i Access kategorien og høre om der er nogen der som kan hjælpe dig med at få gemt datoerne rigtigt ned i Access :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.