webForumDet fria alternativet

Skriva ut aktuell månad samt 8 månader bakåt

ASP

13 svar · 534 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

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

Så, hur ska jag lösa det här på bästa sättet?

Tack!

Medlem sedan maj 200010 687 inlägg
#2

Så här kan man skriva...

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
Medlem sedan feb. 20034 441 inlägg
#3

Erik Juhlin skrev:

Så här kan man skriva...

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.

Ska prova ovanstående, tack sålänge!

Medlem sedan juli 2003465 inlägg
#4

annars så använder du den du har och kör for...to....step -1 istället.
för Jag antar att du har dateadd...

Medlem sedan feb. 20034 441 inlägg
#5

Glitter skrev:

annars så använder du den du har och kör for...to....step -1 istället.
för Jag antar att du har dateadd...

Hmm, nä, använder DatePart, nu har jag den inte i huvudet, men ngt liknande med:

For i = cInt(DatePart("m", Date())) to cInt(12)
   ...
Next

Men det går ju och tänka om. Ske se lite mer sen när jag kommer hem från jobbet.

Medlem sedan maj 200010 687 inlägg
#6

Den koden klarar inte att gå över år.

Medlem sedan feb. 20034 441 inlägg
#7

Erik Juhlin skrev:

Den koden klarar inte att gå över år.

Nä just det, jag väljer din istället, så det funkar som jag vill ;)

Medlem sedan feb. 20034 441 inlägg
#8

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.

Hur löser jag det på bästa sätt?

Tack!

Medlem sedan feb. 20034 441 inlägg
#9

Modifiera funktionen

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. ;)

Tack!

Medlem sedan jan. 2003438 inlägg
#10

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

Medlem sedan feb. 20034 441 inlägg
#11

Ahh, det där ser ju bra ut, tack sålänge!

Återkommer om (när..?) jag kör fast nånstans ;)

Medlem sedan feb. 20034 441 inlägg
#12

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.

Tack!

Medlem sedan jan. 2003438 inlägg
#13

Nu kanske.....?

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
Medlem sedan feb. 20034 441 inlägg
#14

Vackert!
Nu fungerar det precis som jag vill, tack så mycket för hjälpen!

256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)