---
title: "formatera datum"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/73027-formatera-datum"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "plelkes"
published: "2003-04-03T09:39:47.000Z"
updated: "2003-04-09T17:53:20.000Z"
replies: 14
views: 555
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/73027-formatera-datum"
---

# formatera datum

## #1 — plelkes, 2003-04-03T09:39Z

Hej, nu [visas sidan](http://www20.brinkster.com/plelkes/gastboken.asp) nästan som jag vill, men jag är inte nöjd med datumformateringen..
Vill att det skall vara "svensk-formatering" typ:

> skrivet: 03-04-03 kl 20:30

 
Sidans nuvarande 

```
<html>
<head>
<title>g&amp;auml;stbok</title>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>
</head>

<p align=center><font size=7><b><i><font color=#FFCC33>V&auml;lkommen till 
  skolans g&auml;stbok</font></i></b></font></p>
 
<%  dim minCon 'Connection
     dim rsGbok 'recordsetten f&ouml;r nya inl&auml;gg
     dim strSQL

Set minCon = Server.CreateObject("ADODB.Connection")
set rsGbok = Server.CreateObject("ADODB.Recordset")

minCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\plelkes\db\guests.mdb")
strSQL =" SELECT * FROM guestbook ORDER by ID DESC"
rsGbok.Open strSQL, minCon, 3, 3
Do While Not rsGbok.EOF
Response.Write "Skrivet den: " & rsGbok("Datum")
Response.Write "   av: " & rsGbok("Namn") & "<BR>"
Response.Write "Min E-postadress är: " & rsGbok("Epost") & "<BR>"
Response.Write "Mitt inlägg: <BR>"
Response.Write rsGbok("Message")
Response.Write  "<P><HR><P>"

  rsGbok.MoveNext
  Loop
  rsGbok.Close
  Set rsGbok = Nothing
  minCon.Close
  Set minCon = Nothing
  %>
</body>
</html>
```

 

Tacksam för hjälp (med förklaring) hur jag kan få till detta..
Som ni ser så finns sidan på brinkster.

Permalänk: https://www.webforum.nu/p/73027

## #2 — Vide, 2003-04-03T09:48Z

Lägg till:
Session.LCID = 1053
längst upp på sidan.

Möjligtvis behöver du även formatera datumet med cdate() också om det inte funkar.

Permalänk: https://www.webforum.nu/p/999744

## #3 — plelkes, 2003-04-09T10:11Z

Vide, dit förslag fungerade kanonbra!
Men jag skulle villja kunna formatera lite bättre..
Nu får jag

> 2003-03-21 19:33:42

 Men jag skulle villja ha typ

> onsdagen den 9 april, 2003

 
Med kodsnutten

```
dim indag
Session.LCID = 1053 
dim indag

indag=WeekDayName(WeekDay(Now()))&"en den "&Day(Now())& " " & MonthName(Month(Now()))& ", " & Year(Now())
Response.Write indag
```

 får jag fram dagens datum formaterad som jag vill, men nu vill jag har 

```
rsGbok("Datum")
```

 formaterad på det sättet då jag hämtar från databasen

Permalänk: https://www.webforum.nu/p/1006789

## #4 — OveRRidE, 2003-04-09T11:52Z

Läs manualen på <http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfctformatdatetime.asp> .

Permalänk: https://www.webforum.nu/p/1006837

## #5 — plelkes, 2003-04-09T13:23Z

Tack för ditt svar  OveRRidE , men jag får fortfarande inte ihop det hela

> FormatDateTime(Date\[, NamedFormat\])
> Arguments
> Date 
> Required. Date expression to be formatted.

 Så jag försökte med följande:

```
rsGbok("Datum")=indag ' rsGbok("Datum") är ju "Date expr" som skall formateras
dat =WeekDayName(WeekDay(indag()))&"en  "&
_FormatDateTime(indag, 1) 
dat =WeekDayName(WeekDay(indag()))&"en  "& FormatDateTime(indag, 1) 
Do While Not rsGbok.EOF
Response.Write dat
Response.Write "Skrivet den: " & rsGbok("Datum")
Response.Write "   av: " & rsGbok("Namn") & "<BR>"
Response.Write "Min E-postadress är: " & rsGbok("Epost") & "<BR>"
Response.Write "Mitt inlägg: <BR>"
Response.Write rsGbok("Message")
Response.Write  "<P><HR><P>"

  rsGbok.MoveNext

  Loop
  rsGbok.Close
  Set rsGbok = Nothing
  minCon.Close
  Set minCon = Nothing
  %>
```

 
Funkar ej - får felutskrift:

> Microsoft VBScript runtime error '800a000d' 
> 
> Type mismatch 
> 
> /plelkes/gastboken.asp, line 26

Permalänk: https://www.webforum.nu/p/1006910

## #6 — @nders, 2003-04-09T13:27Z

På vänster sida variabel, på höger sida värde. Dessutom måste du se till att konvertera värden från databas till rätt subtyp, i det här fallet subtypen datum (enligt Vides inlägg.).

```
indag = CDate(rsGbok("Datum"))
```

Mvh

Permalänk: https://www.webforum.nu/p/1006913

## #7 — plelkes, 2003-04-09T13:31Z

Tack Anders,,,
men! ju mera jag håller på med asp dessto mindre fattar jag\*snyft\*

Du skrev

> Dessutom måste du se till att konvertera värden från databas till rätt subtyp

 ***Varför det?*** Kan du förklara det på ren svenska, tack

Permalänk: https://www.webforum.nu/p/1006915

## #8 — plelkes, 2003-04-09T15:21Z

**får fanskapet fortfarande inte att fungera!!** \[KOD\]\<% dim minCon 'Connection
dim rsGbok 'recordsetten f&ouml;r nya inl&auml;gg
dim strSQL

dim indag, dat
Session.LCID = 1053 

Set minCon = Server.CreateObject("ADODB.Connection")
set rsGbok = Server.CreateObject("ADODB.Recordset")

minCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\\plelkes\\db\\guests.mdb")
strSQL =" SELECT \* FROM guestbook ORDER by ID DESC"
rsGbok.Open strSQL, minCon, 3, 3
indag = Cdate(rsGbok("Datum"))
dat = WeekDayName(WeekDay(indag))&"en "& FormatDateTime(indag, 1) 
Do While Not rsGbok.EOF

Response.Write "Inlägget nedan skrevs " & dat
Response.Write " av: " & rsGbok("Namn") & "\<BR\>"
Response.Write rsGbok("Namn") & " har E-postadressen : " & rsGbok("Epost") & "\<BR\>"
Response.Write "\<B\>\<U\>Mitt inlägg: \</U\>\</B\>\<BR\>"
Response.Write rsGbok("Message")
Response.Write "\<P\>\<HR\>\<P\>"

rsGbok.MoveNext

Loop
rsGbok.Close
Set rsGbok = Nothing
minCon.Close
Set minCon = Nothing
%\>

Permalänk: https://www.webforum.nu/p/1007002

## #9 — plelkes, 2003-04-09T15:22Z

**får fanskapet fortfarande inte att fungera!!** 

```
<% dim minCon 'Connection
dim rsGbok 'recordsetten f&ouml;r nya inl&auml;gg
dim strSQL

dim indag, dat
Session.LCID = 1053 

Set minCon = Server.CreateObject("ADODB.Connection")
set rsGbok = Server.CreateObject("ADODB.Recordset")

minCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\plelkes\db\guests.mdb")
strSQL =" SELECT * FROM guestbook ORDER by ID DESC"
rsGbok.Open strSQL, minCon, 3, 3
indag = Cdate(rsGbok("Datum"))
dat = WeekDayName(WeekDay(indag))&"en "& FormatDateTime(indag, 1) 
Do While Not rsGbok.EOF

Response.Write "Inlägget nedan skrevs " & dat
Response.Write " av: " & rsGbok("Namn") & "<BR>"
Response.Write rsGbok("Namn") & " har E-postadressen : " & rsGbok("Epost") & "<BR>"
Response.Write "<B><U>Mitt inlägg: </U></B><BR>"
Response.Write rsGbok("Message")
Response.Write "<P><HR><P>"

rsGbok.MoveNext

Loop
rsGbok.Close
Set rsGbok = Nothing
minCon.Close
Set minCon = Nothing
%>
```

Permalänk: https://www.webforum.nu/p/1007005

## #10 — @nders, 2003-04-09T16:04Z

I VBScript finns inga datatyper, utan alla värden är av typen variant. Däremot finns olika subtyper, exempelvis tal, sträng och datum. De flesta funktioner i VBScript kräver att det värdet de tar emot är av en viss subtyp. Därför måste man göra en subtypskonvertering innan man använder funktionen. Datumfunktioner (Year(), Month(), DateAdd(), DatePart(), FormatDateTime() etc) kräver sålunda att värdet de tar emot är av datumtyp. Det ser man till genom att använda CDate() (Convert to Date).

Andra typkonverteringsfunktioner är exempelvis:
CStr() - till sträng
CInt() - till integer (heltal upp till 32k)
CLng() - till long (lång heltal, kan vara hyggligt stort)
CDate() - till datum
CDbl() - till double (decimaltal)
etc.

Det är framför allt värden som kommer från databas eller textfil/dylikt som måste subtypskonverteras innan användning. Om man själv skapar variablerna och dess värden i koden , kan man se till att de är typade till rätt modell redan från början.

```
dteMittDbDatum = objRs("datum") ' här har vi hämtat ut datumet
dteMittDbDatum = CDate(dteMittDbDatum) ' nu är variabeln konverterat till rätt subtyp och kan användas i datumfunktioner
```

På motsvarande sätt måste du ofta konvertera värden till taltyp om du ska räkna med dem, annars riskerar du att 3+4 blir 34.

På vilket sätt fungerar det inte? "Det fungerar inte" är en dålig felbeskrivning och gör det svårt att berätta varför det inte fungerar. Dock:
\* Du har tilldelningen av *dat* utanför loopen, den kommer inte ändras per inlägg
\* Jag gissar på att utskriften av *WeekDayName(WeekDay(indag))& "en "& FormatDateTime(indag, 1)* blir galen. Använd i så fall inte både WeekdayName() och FormatDateTime().

Hoppas det blev lite klarare.

Permalänk: https://www.webforum.nu/p/1007025

## #11 — m_soderlund, 2003-04-09T16:11Z

Jag känner att jag inte behöver bidra med så mycket mer till ämnet, men jag kände också att @nders gav ett enormt utförligt och bra svar. Tummen upp för @nders! (Jag var bara tvungen..)

Permalänk: https://www.webforum.nu/p/1007033

## #12 — plelkes, 2003-04-09T16:54Z

Tack @nders, mycket klarare. Utmärkt förklarat! Till och med jag förstår...

> På vilket sätt fungerar det inte? "Det fungerar inte" är en dålig felbeskrivning och gör det svårt att berätta varför det inte fungerar.

 
Det som inte fungerar [är](http://www20.brinkster.com/plelkes/gastboken.asp)   att det blir dagens datum som skrivs ut. Även efter de ändringar du föreslog!!!

Permalänk: https://www.webforum.nu/p/1007074

## #13 — @nders, 2003-04-09T17:11Z

> **plelkes skrev:**
>
> Tack @nders, mycket klarare. Utmärkt förklarat! Till och med jag förstår...

Toppen! :)

Bara för att vara säker på att du förstod hur jag menade kodmässigt, så flyttar jag på två rader, och ändrar en aning. Prova detta:

```
<% dim minCon 'Connection
dim rsGbok 'recordsetten för nya inlägg
dim strSQL

dim indag, dat
Session.LCID = 1053 

Set minCon = Server.CreateObject("ADODB.Connection")
set rsGbok = Server.CreateObject("ADODB.Recordset")

minCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\plelkes\db\guests.mdb")
strSQL =" SELECT * FROM guestbook ORDER by ID DESC"
rsGbok.Open strSQL, minCon, 3, 3
Do While Not rsGbok.EOF
[b]indag = Cdate(rsGbok("Datum"))
dat = FormatDateTime(indag, 1) [/b]

Response.Write "Inlägget nedan skrevs " & dat
Response.Write " av: " & rsGbok("Namn") & "<BR>"
Response.Write rsGbok("Namn") & " har E-postadressen : " & rsGbok("Epost") & "<BR>"
Response.Write "<B><U>Mitt inlägg: </U></B><BR>"
Response.Write rsGbok("Message")
Response.Write "<P><HR><P>"

rsGbok.MoveNext

Loop
rsGbok.Close
Set rsGbok = Nothing
minCon.Close
Set minCon = Nothing
%>
```

Man kan också förenkla de två fetmarkerade raderna till följande, om man så önskar:

```
dat = FormatDateTime(Cdate(rsGbok("Datum")), 1)
```

Jag hoppas att det blev någon skillnad, och då också till det bättre. ;)

Mvh

Permalänk: https://www.webforum.nu/p/1007090

## #14 — plelkes, 2003-04-09T17:31Z

@anders du är en klippa, hellt enkelt bäst!!
Nu Funkar allt som [jag vill det](http://www20.brinkster.com/plelkes/gastboken.asp) 
Här kommer 

```
<%  dim minCon 'Connection
     dim rsGbok 'recordsetten f&ouml;r nya inl&auml;gg
     dim strSQL

dim indag, dat
Session.LCID = 1053 

Set minCon = Server.CreateObject("ADODB.Connection")
set rsGbok = Server.CreateObject("ADODB.Recordset")

minCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\plelkes\db\guests.mdb")
strSQL =" SELECT * FROM guestbook ORDER by ID DESC"
rsGbok.Open strSQL, minCon, 3, 3
Do While Not rsGbok.EOF
indag = Cdate(rsGbok("Datum"))
dat = WeekDayName(WeekDay(indag))&"en "& FormatDateTime(indag, 1) 
Response.Write "Inlägget nedan skrevs " & dat
Response.Write "   av: " & rsGbok("Namn") & "<BR>"
Response.Write rsGbok("Namn") & " har E-postadressen : " & rsGbok("Epost") & "<BR>"
Response.Write "<B><U>Mitt inlägg: </U></B><BR>"
Response.Write rsGbok("Message")
Response.Write  "<P><HR><P>"

  rsGbok.MoveNext

  Loop
  rsGbok.Close
  Set rsGbok = Nothing
  minCon.Close
  Set minCon = Nothing
  %>
```

 
Men som vanligt så uppstår det nya följdfrågor:

- varför funkar allt nu när Du har tilldelningen av dat och "dat = WeekDayName(WeekDay(indag))&"en "& FormatDateTime(indag, 1)"  finns i loopen

Permalänk: https://www.webforum.nu/p/1007100

## #15 — @nders, 2003-04-09T17:53Z

Om du har de två raderna *utanför* loopen innebär det:
\* Värdet (dvs datumet från fältet *Datum* i recordsetet) hämtas från *den första* raden i recordsetet. Alltså den senaste posten eftersom du valt den sorteringsordningen i din SQL-fråga. Den posten råkar alltså ha dagens datum.
\* Värdet *ändras inte* heller just av anledningen att koden ligger utanför loopen. Så: en gång 9 april, alltid 9 april. ;)

En liten metafor: Du ställer du utanför Posten i Svedmyra och en gammal dam närmar sig entrédörren. Du sträcker dig givetvis för att öppna dörren för damen. När damen gått in, släpper du dörren, och inser att du även ska öppna den för den gamla farbrorn som kommer. Och för mamman med barnvagnen. 

Det är helt enkelt vissa saker som måste upprepas för att allting ska vara optimalt. Visst hade farbrorn kunnat öppna dörren själv, men han hade antagligen inte gjort det på rätt sätt, eftersom han hade en väska och en käpp. ;)

Lägg dörröppningen i loopen, och var så vänlig att hålla upp dörren för alla i den långa kön. :D

Mvh,

Permalänk: https://www.webforum.nu/p/1007121

---

Tråden på webben: https://www.webforum.nu/amne/asp/73027-formatera-datum
