/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Datoformat konvertering i VBScript
Fra : Stig Nygaard


Dato : 03-02-04 12:39

Hej


Jeg har, som tilsyneladende mange andre, svært ved helt at finde ud af
at bruge dato-funktionerne i ASP/VBScript.

Jeg indlæser en dato fra en (access-)database og får den i en af to
følgende formater (afhængig af om jeg kører applikationen på min lokale
server eller på mit webhotel):

24-01-04 22:55:25
24-01-2004 22:55:25

Jeg skal have dette konverteret til et format der er magen til RFC822
(http://asg.web.cmu.edu/rfc/rfc822.html), bortset fra at årstallet skal
være fire-cifret. Ovenstånde skal altså f.eks. konverteres til:

Sat, 24 Jan 2004 22:55:25 +0100

Jeg forsøger mig med en funktion noget a'la


Function RFC822Date(str)
Dim re, ms, m, dt, day, month
Set re = new RegExp
re.Pattern =
"(\d\d)[-./](\d\d)[-./](20)?(\d\d)\s(\d\d)[:.-](\d\d)([:.-](\d\d))?"
Set ms = re.Execute(str)
Set m = ms(0)
Set dt =
DateSerial(2000+m.SubMatches(3),m.SubMatches(1),m.SubMatches(0))
Set month = MonthName(m.SubMatches(1),True)
Set day = WeekdayName(Weekday(dt,2),True,2)
' RFC822Date = (håber dette er trivielt at sætte sammen når jeg
har ovenstående)
End Function


Men udover at det fejler med

Et objekt er obligatorisk: 'DateSerial(...)'

har jeg også på fornemmelsen af at jeg er "på vej over åen efter vand".

Det skinner måske også lidt igennem at jeg ikke har så meget tjek på
objekter i VBScript. Har overvejet at lave det hele om til JScript som
jeg er meget skrappere til, men det er alligevel en ret stor applikation
jeg skal konvertere, så håber at få et brugbart VBScript-tip her i
stedet


Mvh. Stig
www.rockland.dk


 
 
Torben Brandt (03-02-2004)
Kommentar
Fra : Torben Brandt


Dato : 03-02-04 17:52

Stig Nygaard skrev:
> Function RFC822Date(str)
> Dim re, ms, m, dt, day, month
> Set re = new RegExp
> re.Pattern =
> "(\d\d)[-./](\d\d)[-./](20)?(\d\d)\s(\d\d)[:.-](\d\d)([:.-](\d\d))?"
> Set ms = re.Execute(str)
> Set m = ms(0)
> Set dt =
> DateSerial(2000+m.SubMatches(3),m.SubMatches(1),m.SubMatches(0))
> Set month = MonthName(m.SubMatches(1),True)
> Set day = WeekdayName(Weekday(dt,2),True,2)
> ' RFC822Date = (håber dette er trivielt at sætte sammen når jeg
> har ovenstående)
> End Function
>
>
> Men udover at det fejler med
>
> Et objekt er obligatorisk: 'DateSerial(...)'
>
> har jeg også på fornemmelsen af at jeg er "på vej over åen efter vand".

Man skal kun bruge "Set" (som i: "Set var1 = ...") hvis højresiden er et
objekt.
Et RegExp er f.eks. et objekt så du skriver "Set re = New RegExp", men
en dato er ikke et objekt, så du skal ikke have "Set" foran "dt = ...".
Der skal heller ikke "Set" foran "month" og "day" da de bare er strenge.

I øvrigt er ordene "month" og "day" reserverede til standard-funktioner,
så navnene er ugyldige som variabel-navne.
Dette ville give en fejl, hvis der ikke have været en inden...

PS Hvis feltet i databasen er af typen dato, så behøver du ikke at lave
den om til en streng, og derefter opdele den igen vha RegExp:
dato = rs("dato")
ugedag = WeekdayName(Weekday(dato, 2), True, 2)
dag = Day(dato)
maaned = MonthName(Month(dato))
aar = Year(dato)
timetal = Hour(dato)
minutter = Minute(dato)
sekunder = Second(dato)
[Grunden til at den er forskellig på de to servere kan være
datoindstillingerne på serveren]

/Torben


Jørn Andersen (03-02-2004)
Kommentar
Fra : Jørn Andersen


Dato : 03-02-04 19:10

On Tue, 03 Feb 2004 12:38:48 +0100, Stig Nygaard
<stig@nospamto-r-o-c-k-l-a-n-d.dk> wrote:

>Jeg har, som tilsyneladende mange andre, svært ved helt at finde ud af
>at bruge dato-funktionerne i ASP/VBScript.

Ja, du er ikke den eneste ...

>Jeg indlæser en dato fra en (access-)database og får den i en af to
>følgende formater (afhængig af om jeg kører applikationen på min lokale
>server eller på mit webhotel):
>
>24-01-04 22:55:25
>24-01-2004 22:55:25

>Ovenstånde skal altså f.eks. konverteres til:
>Sat, 24 Jan 2004 22:55:25 +0100

> Function RFC822Date(str)

Udgangspunktet for enhver form for dato-behandling i ASP er at
fokusere på dato-*værdien* frem for på dato-formatet.

Brug derfor datoværdien, ikke en tekststreng (formatet) som
udgangspunkt for din funktion. Og brug så de indbyggede
dato-funktioner i stedet for strengmanipulation.

Hvis du skal have foranstillede nuller i månedens dato, kunne det fx
se således ud:

Function fctRFC822Date(datDate)
   Dim strDate, arrWeekDayName, arrMonth
   arrWeekDayName = Split(" Mon Tue Wed Thu Fri Sat Sun")
   arrMonth = Split(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec")

   strDate = arrWeekDayName(Weekday(datDate, 2)) & ", " & _
   Right("0" & Day(datDate), 2) & " " & _
   arrMonth(Month(datDate)) & " " & _
   Year(datDate) & " " & _
   Right("0" & Hour(datDate), 2) & ":" & _
   Right("0" & Minute(datDate), 2) & ":" & _
   Right("0" & Second(datDate), 2)

   fctRFC822Date = strDate & " +0100"
End Function

Brug den således:
Response.Write fctRFC822Date(Now)
- eller direkte fra databasen:
Response.Write fctRFC822Date(objRs("MyDate"))

Glem alt om datoformater - denne funktion burde også virke, selv om du
skifter til en server, som leverer et helt tredje format.
Jeg *har* prøvet at skulle rette scripts efter en server-opgradering -
det er ret surt ...

Hvis du er sej til SQL, kan du bygge det hele ind i din
SQL-forespørgsel i stedet, så er du også uafhængig.

Good luck!

--
Jørn Andersen,
Brønshøj

Stig Nygaard (03-02-2004)
Kommentar
Fra : Stig Nygaard


Dato : 03-02-04 21:18

Hej Torben og Jørn


Stig Nygaard wrote:
> Jeg har, som tilsyneladende mange andre, svært ved helt at finde ud af
> at bruge dato-funktionerne i ASP/VBScript.

Fantastisk. Tusind tak for jeres hjælp, det spiller nu!

Jep jeg kan læse ind direkte i dato-format fra databasen. Tænkte nok at
jeg prøvede at gøre det på en alt for omstændig måde (og ufattelig så
mange fejl jeg kan lave på så få linier i øvrigt)


Mvh. Stig
www.rockland.dk


Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408943
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste