On Thu, 23 Feb 2006 23:05:29 +0100, "MooreHojer" <simon@moorehojer.dk>
wrote:
>Jeg har i min database en felt af typen 'Date' der har formen
>'yyyy-mm-dd'.
>På min side har jeg et formfelt af typen 'text' hvor brugeren skal
>skrive en dato på formen 'dd-mm-yyyy'.
>
>Er der en måde at konvertere brugerens form til databasen form, og
>omvendt?
Start med at læse:
<url:
http://www.asp-faq.dk/article/?id=47>
<url:
http://www.asp-faq.dk/article/?id=98>
- især den sidste.
De fleste begår den fejl, at de fokuserer på datoernes *form*, i
stedet for på deres *værdi*. Det sker fx når man overfører datoer til
Sql'en som tekststrenge (fx '13-05-2006').
Man får helt klart færrest problemer, hvis man behandler dem som
datoer, når de skal ind og ud af databaser - som den sidstnævnte
artikel viser.
Når man så skal have dem vist på sin side, kan man enten bruge
standard-formatterne - se fx:
<url:
http://www.html.dk/tutorials/asp/lektion4.asp>
eller man kan selv tilpasse formatet ved at trække dag-, måned- og
år-værdierne ud af dato-variablen og så stykke en passende streng
sammen af dette.
Når man skal have datoer fra en formular ind en database, er der også
flere muligheder.
a) Man kan spare en del validering ved at bruge select-boxe til at
lade folk *vælge* datoer i stedet for at skrive dem.
b) Den mere avancerede løsning er at lave en egentlig
kalender-funktion (som i ASP.Net er utroligt nemt, men er en noget
mere kompleks ting i trad. ASP.)
I begge tilfælde (a og b) skal de valgte værdier så bare sættes ind i
Sql-strengen på samme måde som i artklens første eksempel:
strSQLDate = "INSERT INTO Tabel (datoFelt) VALUES (DateSerial(" & Aar
& ", " & Maaned & ", " & Dag & "))"
c) Hvis man alligevel vælger at lade folk *skrive* datoen, skal man
for det første lave noget validering, så man sikrer sig, at det
faktisk er en dato. Dernæst skal man putte det ind i Sql-strengen som
i førnævnte eksempel - efter at man har trukket de enkelte værdier
(år, måned, dag) ud af tekststrengen (med Left, Right og Mid).
>Hvis man skal sammen ligne to datoer i ASP er det så bare at som man
>normalt ville med en variabel eller et recordset?
>If Date = rs("dato") Then
> .....
>End If
Det kan man godt, hvis værdien af rs("dato") er en "ren" dato uden
timer, min. og sek.
Date1 = DateSerial(2006, 2, 24) + TimeSerial(23, 30, 0)
Response.Write (Date = Date1)
' Vil udskrive False undtagen kl. 23.30.00
Date2 = DateSerial(2006, 2, 24)
Response.Write (Date = Date2) & "<br>" & vbcrlf
' Vil udskrive True hele dagen
Ellers er DateDiff den "rigtige" måde at gøre det på.
If DateDiff("d", Date, rs("dato")) = 0 Then ...
I det hele taget kan det godt betale sig at bruge lidt tid på at sætte
sig ind i VBScripts dato-funktioner:
DateDiff, DateAdd, DatePart
TimeSerial, DateSerial
DateValue, TimeValue
Hour, Minute, Second
Day, Month, Year
Weekday, WeekdayName, MonthName
CDate
Lad dato/tid-værdier forblive dato/tid-værdier undtagen i selve
udskriften. Ved hjælp af VBScripts dato-funktioner har man rigtigt
mange muligheder for at beregne og bearbejde dato/tid-information, som
man mister, hvis man springer over, hvor gærdet (tilsyneladende) er
lavest og fokuserer på formatet og behandler dem som tekststrenge.
Håber det leder dig på rette vej - ellers spørg igen
Good luck!
--
Jørn Andersen,
Brønshøj