Avatar billede saudoo Nybegynder
07. februar 2006 - 11:20 Der 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?

Håber i kan hjælpe. :)

Tak
Avatar billede cpufan Juniormester
07. februar 2006 - 11:27 #1
sql = "select * from tabel order by dato desc"

set rs = conn.execute(sql)

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
Avatar billede softspot Forsker
07. februar 2006 - 11:31 #2
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...
Avatar billede saudoo Nybegynder
07. februar 2006 - 12:27 #3
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? :\
Avatar billede cpufan Juniormester
07. februar 2006 - 12:33 #4
<%
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>"

        finddato.MoveNext
        Wend
   
    finddato.Close
    Set finddato = Nothing
Avatar billede softspot Forsker
07. februar 2006 - 12:35 #5
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...
Avatar billede saudoo Nybegynder
07. februar 2006 - 12:41 #6
softspot >>

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. :)
Avatar billede softspot Forsker
07. februar 2006 - 12:46 #7
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
   
    finddato.Close
    Set finddato = Nothing
%>
Avatar billede saudoo Nybegynder
07. februar 2006 - 12:57 #8
Jeg vil gerne sige tak til jer begge. :)

Jeg endte med at bruge cpufans eksempel, lige 1-2 mins før du smed det sidste eksemple softspot, der iøvrigt virkede. :)

Men jeg valgte som sagt at bruger cpufan's eksempel, og derfor giver jeg pointene til cpufan.
Avatar billede cpufan Juniormester
07. februar 2006 - 20:01 #9
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester