07. februar 2006 - 11:20Der er
8 kommentarer og 1 løsning
Finde måned og år fra postede dato'er
Hej Eksperten,
Jeg har et lille problem, med hvordan jeg griber dette an.
Jeg har kort, et sted, hvor man kan skrive lidt nyheder. Det er rimelig simpelt nyhedssystem. Og problemet er at jeg også til have en liste skrevet med de måneder der er skrevet i, ex:
Februar 2006 Januar 2006
December 2005 November 2005 Oktober 2005 September 2005 August 2005 Juli 2005 Juni 2005
Ideen er at de skal findes ved at tjekke de skrevne nyheders dato'er. Men hvordan skal man gribe det an?
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
nmd = "" do while not rs.eof if month(rs("dato")) <> nmd then response.write "<b>"& month(rs("dato")) &" "&year(rs("dato"))&"</b><br>" nmd = month(rs("dato")) end if response.write rs("nyhed") &"<br>" loop
Det afhænger jo lidt af hvordan du får fat i dine data, men under antagelse af at du benytter Access og derfor kan finde dem via SQL, så kunne jeg da forestille mig noget i stil med flg. SQL:
SELECT DISTINCT year(dato) AS theYear, month(dato) AS theMonth FROM tabellen ORDER BY year(dato), month(dato) DESC
Så kan du gennemløbe resultatet og omsætte de påg. informationer til fra resultatet til elementer i en dropdown eller hvor den nu skal vises...
cpufan >> Jeg kunne ikke få dit script til at virke..
softspot >>
Jeg prøvede at gøre således:
<% Set finddato = Server.CreateObject("ADODB.Recordset") finddato.Open "SELECT DISTINCT dato AS datoen FROM nyhed_nyhed ORDER BY dato DESC", database
While NOT finddato.EOF maaned = Month(finddato.Fields("datoen"))
Select Case maaned Case "1":maanednavn = "Januar" Case "2":maanednavn = "Februar" Case "3":maanednavn = "Marts" Case "4":maanednavn = "April" Case "5":maanednavn = "Maj" Case "6":maanednavn = "Juni" Case "7":maanednavn = "Juli" Case "8":maanednavn = "August" Case "9":maanednavn = "September" Case "10":maanednavn = "Oktober" Case "11":maanednavn = "November" Case "12":maanednavn = "December" End Select Response.Write maanednavn & " " & Year(finddato.Fields("datoen")) & "<br />" & VbCrlf finddato.MoveNext Wend
finddato.Close Set finddato = Nothing %>
Men den skriver stadig måned + år, flere gange, hvis de findes flere gange. Det burde DISTINCT da sørge for at den ikke gør, ikke? :\
<% session.lcid = 1030 Set finddato = Server.CreateObject("ADODB.Recordset") finddato.Open "SELECT * FROM nyhed_nyhed ORDER BY dato DESC", database nmd = "" While NOT finddato.EOF
if monthname(finddato("dato")) <> nmd then response.write "<b>"& monthname(finddato("dato")) &" "&year(finddato("dato"))&"</b><br>" nmd = monthname(finddato("dato")) end if response.write rs("nyhed") &"<br>"
Grunden til at jeg splittede datoen op i SQL-sætningen var at distinct jo finder alle rækker der er forskellige i resultatet. Din version finder alle de enkelte dage, men du vil kun finde måneder og år. Prøv min version af SQL-sætningen i stedet...
Jeg har lige prøvet, men den giver en masse underlige dato'er. Januar 1890 December 2006 osv. :S
cpufan >> Jeg ved ikke om jeg gør noget forkert, eller min server bare er fucked. Men jeg kan altså hverken bruge 'monthname' på min lokale IIS server eller på min udbyders.
Om ikke andet prøver jeg lige at lege lidt mere med det. Og evt. gør brug af nogle cases istedet. :)
Jamen, koden skal jo tilpasses det resultet du får:
<% Set finddato = Server.CreateObject("ADODB.Recordset") sql = "SELECT DISTINCT year(dato) AS theYear, month(dato) AS theMonth " & _ "FROM tabellen " & _ "ORDER BY year(dato), month(dato) DESC" finddato.Open sql, database
While NOT finddato.EOF maaned = finddato("theMonth")
Select Case maaned Case "1":maanednavn = "Januar" Case "2":maanednavn = "Februar" Case "3":maanednavn = "Marts" Case "4":maanednavn = "April" Case "5":maanednavn = "Maj" Case "6":maanednavn = "Juni" Case "7":maanednavn = "Juli" Case "8":maanednavn = "August" Case "9":maanednavn = "September" Case "10":maanednavn = "Oktober" Case "11":maanednavn = "November" Case "12":maanednavn = "December" End Select Response.Write maanednavn & " " & finddato("theYear") & "<br />" & VbCrlf finddato.MoveNext Wend
faldt lige over monthname, den skal benyttes således:
monthname(month(finddato("datoen")))
beklager fejlen......
monthname returner navnet ud fra tallene 1-12 month returner tallet fra 1-12
session.lcid = 1030 sørger for dansk kalender
Synes godt om
Ny brugerNybegynder
Din løsning...
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.