webForumDet fria alternativet

Datum-hantering

15 svar · 853 visningar · startad av hallmert

hallmertMedlem sedan dec. 2004182 inlägg
#1

Hej på er!

Jag håller på att skriva diverse prylar och skulle behöva hjälp med en grej som jag inte riktigt ens vet hur jag ska försöka lösa.

Jag har <%=rs("datum")%> som utskrivet ser ut exempelvis
2005-07-15 10:32:25 - ett helt datum som skrivs in i min databas med "Now" helt enkelt!

Nu skulle jag vilja formatera det här lite när det skrivs ut, och skulle vilja ha något i den här stilen:

" Idag kl. 10:32 " <-- OM DET ÄR IDAG.
" Fredagen den 7 juli kl. 10:32 " <-- OM DATUMET VAR FÖR FLERA DAGAR SEN.
" Igår kl. 10:32 " <-- OM DATUMET VAR IGÅR.

Är det svåra grejer? Vore tacksam för hjälp med det här scriptet!
Stort tack i förväg!

cyprysMedlem sedan dec. 20003 563 inlägg
#2

med reservation för något syntaxfel

select case date(rs("datum"))
case date()
  response.write "Idag " & time(rs("datum"))
case dateadd("d",-1, date())
  response.write "Igår " & time(rs("datum"))
case else
  response.write FormatDateTime(rs("datum"),vbLongDate)
hallmertMedlem sedan dec. 2004182 inlägg
#3

Jag fick det inte att fungera, här är min kod:

	<table width="469" cellpadding="0" cellspacing="0">
	<%
	Set MinCon = Server.CreateObject("ADODB.Connection")
	Set rs = Server.CreateObject("ADODB.RecordSet")
	
	MinCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/db.mdb")
	SQL = "select top 1 * from blogg order by datum desc" 
	rs.Open SQL, MinCon
	
	Do While Not rs.EOF
	%>
	<tr>
	<td width="469" valign="top">
	<div class="rubrik"><%=lCase(rs("rubrik"))%>,
	
	<% select case date(rs("datum"))
	case date()
	  response.write "Idag " & time(rs("datum"))
	case dateadd("d",-1, date())
	  response.write "Igår " & time(rs("datum"))
	case else
	  response.write FormatDateTime(rs("datum"),vbLongDate) %>
	
	<%=replace(rs("text"), vbCrLf, "<br>")%>
	</td>
	</tr>	
	<tr>
	<td width="469" height="5"></td>
	</tr>
	<tr>
	<td width="469" height="1" bgcolor="#D0D0D0"></td>
	</tr>
	<tr>
	<td width="469" height="20" valign="middle" align="right">
	</td>
	</tr>
	<%
	rs.movenext
	Loop
	%>
	</table>

Och felmeddelande:

Feltyp:
Kompileringsfel i Microsoft VBScript (0x800A040E)
'loop' utan 'do'
/sidor/blogg/start.asp, line 39

BaltizMedlem sedan maj 200591 inlägg
#4

End select har du glömt.

hallmertMedlem sedan dec. 2004182 inlägg
#5

Hjälper ändå inte. Och vad har end select med felmeddelandet att göra?

cyprysMedlem sedan dec. 20003 563 inlägg
#6

Vad menar du med 'hjälper ändå inte'? Vad får du för nytt felmeddelande?

Jag glömde 'end select' vilket även gällde i din kod.

select case date(rs("datum"))
case date()
  response.write "Idag " & time(rs("datum"))
case dateadd("d",-1, date())
  response.write "Igår " & time(rs("datum"))
case else
  response.write FormatDateTime(rs("datum"),vbLongDate)
end select

Kör detta och skicka ditt nya felmeddelande, om du får något d.v.s.

hallmertMedlem sedan dec. 2004182 inlägg
#7

Det här blir nya felmeddelandet:

Feltyp:
Körningsfel i Microsoft VBScript (0x800A01C2)
Fel antal argument eller felaktig egenskapstilldelning.: 'date'
/sidor/blogg/start.asp, line 15

BaltizMedlem sedan maj 200591 inlägg
#8

Tja, då är väl felet på rad 15. Kan ju inte vara så svårt att kolla upp när man har felmeddelandet i klartext på svenska.

hallmertMedlem sedan dec. 2004182 inlägg
#9
<% select case date(rs("datum"))

Där har du rad femton! Varsågod, hitta ett fel!

BaltizMedlem sedan maj 200591 inlägg
#10

Date är ingen funktion som tar parameter, testa CDate istället.

cyprysMedlem sedan dec. 20003 563 inlägg
#11

Ok. Tanken var mest att visa hur man kan göra då min syntax sällan är på hugget. Detta är t.o.m. testat och fungerar.

datum = rs("datum") 
select case cdate(FormatDateTime(datum,vbShortDate))
 case date()
  response.write "Idag " & FormatDateTime(datum, vbShortTime)
 case dateadd("d",-1, date())
  response.write "Igår " & FormatDateTime(datum, vbShortTime)
 case else
  response.write FormatDateTime(datum,vbLongDate)
end select
medialabsMedlem sedan mars 20023 686 inlägg
#12

Istället för att starta en till tråd så fortsätter jag här.

Har suttit och fipplat lite på en ny funktion till vår nya webbplats och har lyckats trixa fram de senaste 5 svaren från forumet. Men stött på lite "problem" nu när jag också vill skriva ut tidpunkt.

Hitta funktionen här i denna tråd som såg intressant, eftersom den skriver ut ordet Idag om svaret skrevs idag osv.. Men jag har inte klurat ut HUR jag ska få in funktionen i min Loop. :q

datum = rs("datum") 
select case cdate(FormatDateTime(datum,vbShortDate))
 case date()
  response.write "Idag " & FormatDateTime(datum, vbShortTime)
 case dateadd("d",-1, date())
  response.write "Igår " & FormatDateTime(datum, vbShortTime)
 case else
  response.write FormatDateTime(datum,vbLongDate)
end select

Sparar datum i följande format i databasen: 20090519192344
Datumet plockar jag fram med följande: & RSForum_REPLY("T_LAST_POST") & vilket inte blir så snyggt..

				SQLForum_REPLY = "SELECT * FROM forum_topics order by T_LAST_POST_REPLY_ID DESC LIMIT 0,5"

			set RSForum_REPLY = ConnectForum_REPLY.Execute (SQLForum_REPLY)

				do while not RSForum_REPLY.eof

    					Response.write "<img src=""http://www.medialabs.se/images/pil_nyheter.gif"" width=""9"" height=""10"" border=""0"" alt=""""> <a href=""http://www.posthistoria.nu/forum/topic.asp?TOPIC_ID=" & RSForum_REPLY("TOPIC_ID") & """ target=""_blank"">" & RSForum_REPLY("T_SUBJECT") & "</i></a> " [B]& RSForum_REPLY("T_LAST_POST") &[/B]"<br>"

    				RSForum_REPLY.MoveNext
				Loop
voigtann1Medlem sedan juni 20019 519 inlägg
#13

Kan kanske använda: http://www.webforum.nu/showthread.php?t=43454 ?

Eller om du vill använda dig av koden ovan, lägg det i en funktion:

Function DisplayDate(datum) 
	select case cdate(FormatDateTime(datum,vbShortDate))
		case date()
			DisplayDate =  "Idag " & FormatDateTime(datum, vbShortTime)
		case dateadd("d",-1, date())
			DisplayDate =  "Igår " & FormatDateTime(datum, vbShortTime)
		case else
			DisplayDate =  FormatDateTime(datum,vbLongDate)
	end select
End Function

Och anropar den med DisplayDate(RSForum_REPLY("T_LAST_POST"))

BiasseMedlem sedan aug. 2003480 inlägg
#14

Ska väl fungera att lägga in detta i loopen?

  idag = date()
  igar = DateAdd("d",-1,date())
  datum = cdate(Left(rs("datum"),10))

  If datum = idag Then				
    Response.write "Idag"
  ElseIf datum = igar  Then  
    Response.write "Igår"
  Else
    Response.write cdate(Left(rs("datum"),10))
  End If
medialabsMedlem sedan mars 20023 686 inlägg
#15

voigtann1 skrev:

Kan kanske använda: http://www.webforum.nu/showthread.php?t=43454 ?

Eller om du vill använda dig av koden ovan, lägg det i en funktion:

Function DisplayDate(datum) 
	select case cdate(FormatDateTime(datum,vbShortDate))
		case date()
			DisplayDate =  "Idag " & FormatDateTime(datum, vbShortTime)
		case dateadd("d",-1, date())
			DisplayDate =  "Igår " & FormatDateTime(datum, vbShortTime)
		case else
			DisplayDate =  FormatDateTime(datum,vbLongDate)
	end select
End Function

Och anropar den med DisplayDate(RSForum_REPLY("T_LAST_POST"))

Jag testade din funktion och fick

Jag använder MySQL och T_LAST_POST är i definerat som VarChar(14). Kan det ha att göra med det då jag får följande fel: Invalid procedure call or argument: 'FormatDateTime' och den pekar på raden: select case cdate(FormatDateTime(datum,vbShortDate))

Jag tolkar det som att den inte gillar att den är formaterad som VarChar eller är jag fel ute?

voigtann1Medlem sedan juni 20019 519 inlägg
#16

Tyvärr har du en extremt dålig databas design om du har ställt in att ett datum är en sträng, men du kan testa Biasses kod för att formatera strängen till ett datum innan du slänger in det i funktionen:

datum = cdate(Left(rs("datum"),10))
139 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)