Tja
Håller på med ett nyhetsarkiv, där man ska kolla gamla nyheter, uppdelade på år och månad.
Har tänkt mig att man ska kunna gå tillbaka 8 månader i tiden. Problemet är bara att jag inte kommit på hur jag ska göra för att skriva ut månaderna med en loop.
Om man skulle ladda sidan idag, så vill jag att den ska visa:
[b]2005[/b]
Maj
April
Mars
Februari
Januari
[b]2004[/b]
December
November
Oktober
Dim lYear, lMonth, i
lYear = Year(Now)
lMonth = Month(Now)
Dim lLastYear, dDate
lLastYear = 0
For i = 0 To 7
dDate = DateSerial(lYear, lMonth - i, 1)
If Year(dDate) <> lLastYear Then
Response.Write "<strong>" & Year(dDate) & "</strong><br>"
lLastYear = Year(dDate)
End If
Response.Write MonthName(Month(dDate)) & "<br>"
Next 'i
Aha, det var så man skulle göra. Har nämligen gjort en liknande For .. to ... loop för att plocka fram månader framåt, men tänkte inte på hur jag skulle göra för att gå bakåt i tiden.
Jag skulle vilja modifiera Erik Juhlins förslag ovan, så det blir till det bättre.
Jag skulle vilja att den skriver ut månader bakåt, sålångt det finns nyheter i db'n.
Databasen jag använder är av typen Access och fältet som lagrar datum / tid heter "nDt". tidstämplen tas ut av Now(), dvs i formatet 2005-05-18 13:31
Jag vill alltså innan for-loopen kolla mot db'n vilket det älsta datumet är (samt) år och sen skriva ut det som slutmånad, det ska även formateras på samma sätt som scriptet längre upp i den här tråden.
Tja
Nu vill jag modifiera Erik Juhlins kod lite grann.
Har försökt men får inte till det helt.
Jag vill plocka ut ett datum i databasen, som ska tillhöra den äldsta nyheten, sedan skriva ut månader samt år enl. funktionen, men MAX skriva ut 24 måndader bakåt i tiden.
Jag ska försöka lite till, men kör fast mest hela tiden. ;)
Har testat lite, det fattas fortfarande att skriva ut den äldsta nyheten. Annars skall det nog funka hyfsat tror jag :)
Fortsätt jobba på bara!
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("test.mdb")&";"
strSQL = "SELECT id, datum, rubrik FROM tbl_nyheter"
Set RecSet = Connect.Execute(strSQL)
IF NOT RecSet.EOF THEN arrRecords = RecSet.GetRows
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
IF ISArray(arrRecords) THEN
lLastYear = 0
FOR i=0 to UBound(arrRecords,2)
if i<23 then
field1 = arrRecords(0,i)
field2 = arrRecords(1,i)
field3 = arrRecords(2,i)
lYear = Year(field2)
lMonth = Month(field2)
dDate = DateSerial(lYear, lMonth - j, 1)
If Year(dDate) <> lLastYear Then
Response.Write "<strong>" & Year(dDate) & "</strong><br>"
lLastYear = Year(dDate)
End If
Response.write MonthName(Month(field2)) &":"& field3 & "<br>"
end if
Next
End if
Annars får väl någon av guru:sarna skrika till! :r
Hmm, nu har jag kört ditt exempel rakt av och tror att vi missuppfattat varann lite.
Månaderna och åren skall skrivas ut precis som jag visat i första inlägget i den här tråden:
[b]2005[/b]
Juli
Juni
Maj
April
Mars
Februari
Januari
[b]2004[/b]
December
November
Oktober
Den listar alltså månader från aktuell månad och 24 månader tillbaka i tiden.
Nu vill jag alltså göra så att jag plockar ut den älsta nyheten från databasen, vi kan låtsas att den skrevs i januari iår.
Då skall det alltså skrivas ut:
[b]2005[/b]
Juli
Juni
Maj
April
Mars
Februari
Januari
Om vi låtsas att den älsta nyheten skrevs år 2001, alltså för mer än 24 månader sedan, skall bara från aktuell månad (juli) och 24 månader bakåt skrivas ut, precis som jag visar ovan.
Jag har satt ihop ditt exempel och saker skrivs ut, fast helt galet, så jag tror jag ,förklarat dåligt.
Hoppas det klarnat lite nu, har inga egna idéer på hur jag ska lösa det här.
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("test.mdb")&";"
strSQL = "SELECT top 1 id, datum, rubrik FROM tbl_nyheter ORDER BY datum asc"
Set RecSet = Connect.Execute(strSQL)
IF NOT RecSet.EOF THEN arrRecords = RecSet.GetRows
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
IF ISArray(arrRecords) THEN
id = arrRecords(0,i)
datum = arrRecords(1,i)
rubrik = arrRecords(2,i)
nowDate=Date()
months=DateDiff("m",datum,nowDate)
if months>23 Then : value = "23" : else : value = months : end if
End if
Dim lYear, lMonth, i
lYear = Year(Now)
lMonth = Month(Now)
Dim lLastYear, dDate
lLastYear = 0
For i = 0 To value
dDate = DateSerial(lYear, lMonth - i, 1)
If Year(dDate) <> lLastYear Then
Response.Write "<strong>" & Year(dDate) & "</strong><br>"
lLastYear = Year(dDate)
End If
Response.Write MonthName(Month(dDate)) & "<br>"
Next 'i