webForumDet fria alternativet

Loopa igenom dagar.

16 svar · 583 visningar · startad av Hulth

HulthMedlem sedan juni 2001272 inlägg
#1

Först och främst vill jag be om ursäkt för den luddiga rubriken, men kommer inte på något bättre att kalla det.

Jag har 2 input-fält. I dessa ska man skriva två datum, tex 2005-05-20 och 2005-10-13.

Då ska scriptet:
1. Räkna ut hur många dagar det är mellan de två datumen
2. Göra en loop som ska hämta varje dag ifrån en databas och bearbeta lite information som finns i den.

Har inte en aning över hur jag ska göra detta, är inte heller så insatt i hur DateAdd funkar, men är ganska säker på att den behövs?

Tacksam för förslag, hjälp, kodsnuttar osv :)

GuffaMedlem sedan juni 2004533 inlägg
#2

1. Använd DateDiff.

2. Det är nog bättre om du hämtar alla dagar som finns mellan datumen, och loopar igenom resultatet. Annars blir det ju en väldig massa databasfrågor.

HulthMedlem sedan juni 2001272 inlägg
#3

Den bearbetning som ska göras är redan ganska tung, och det rullar på en dedikerad kraftigb burk enbart till detta syfte, så varför inte använda maskineriet lite? ;)

Dom funderar jag har haft har baserat sig på att man skriver in två datum, kollar med DateDiff hur många dagar det skiljer sig mellan datumen, sen loopar igenom en viss kod det antal dagar som skiljer.

Då måste den ju i varje loop veta vilken dag det är, och då kan man väl lägga det första datumet i en variabel, sen kör man DateAdd på den i loopen?

Ursäkta luddigheten, har inte fått min kaffe än...

PalleMedlem sedan apr. 20003 174 inlägg
#4

Re: Loopa igenom dagar.

Hulth skrev:

Då ska scriptet:
1. Räkna ut hur många dagar det är mellan de två datumen
2. Göra en loop som ska hämta varje dag ifrån en databas och bearbeta lite information som finns i den.

1.

[red]<%= DateDiff("d","2005-05-20","2005-10-13") %>[/red]

2.

[red]select * from table where field between '2005-05-20' and '2005-10-13'[/red]
HulthMedlem sedan juni 2001272 inlägg
#5

Palle:

Den tackar jag för.. ska exprimentera lite med den när jag kommer hem ifrån skolan.

Ungefär såhär är det jag vill göra:

Dim strDate1, strDate2, strNumberOfDays, strWorkingDay
Dim strThisDay, strSQL

strDate1 = Request.Form("Date1")
strDate2 = Request.Form("Date2")

strNumberOfDays = DateDiff("d",strDate1,strDate2)

For strWorkingDay = 1 To strNumberOfDays

If strThisDay = "" Then
strThisDay = strDate1
End If

strSQL = "Select * from db where date = #" & strThisDay & "#"
' öppna tabellen...

' Skriva ut lite info om denna dagen osv, inget som berör databasen.

Do Until objRecSet1.EOF
' bearbeta en massa tjaffs
Next

strThisDay = DateAdd(strThisDay,[B]lägg till en dag[/B])

Loop

Lite osäker på hur man använder DateAdd-funktionen, men kan detta vara rätt sätt?
strBlabla = DateAdd(datum,antal,vad) ??

antal = hur många av "vad" som ska läggas till
vad = dag, månad, timme, minut, år osv osv

J.N.Medlem sedan apr. 20031 660 inlägg
#6

HEJ!

Hulth skrev:

...Lite osäker på hur man använder DateAdd-funktionen, men kan detta vara rätt sätt?
strBlabla = DateAdd(datum,antal,vad) ??

antal = hur många av "vad" som ska läggas till
vad = dag, månad, timme, minut, år osv osv

Ja, det är rätt:
DateAdd(Interval, Number, Date)

http://www.devguru.com/Technologies/vbscript/quickref/dateadd.html

HulthMedlem sedan juni 2001272 inlägg
#7

J.N. skrev:

HEJ!

Hulth skrev:

...Lite osäker på hur man använder DateAdd-funktionen, men kan detta vara rätt sätt?
strBlabla = DateAdd(datum,antal,vad) ??

antal = hur många av "vad" som ska läggas till
vad = dag, månad, timme, minut, år osv osv

Ja, det är rätt:
DateAdd(Interval, Number, Date)

http://www.devguru.com/Technologies/vbscript/quickref/dateadd.html

Enligt din sida är ju mitt "exempel" fel då.. :p

DateAdd(vad,antal,datum) ska det ju vara då :)

Då borde ju denna koden fungera:

Dim strDate1, strDate2, strNumberOfDays, strWorkingDay
Dim strThisDay, strSQL

strDate1 = Request.Form("Date1")
strDate2 = Request.Form("Date2")

strNumberOfDays = DateDiff("d",strDate1,strDate2)

For strWorkingDay = 1 To strNumberOfDays

If strThisDay = "" Then
strThisDay = strDate1
End If

strSQL = "Select * from db where date = #" & strThisDay & "#"
' öppna tabellen...

' Skriva ut lite info om denna dagen osv, inget som berör databasen.

Do Until objRecSet1.EOF
' bearbeta en massa tjaffs
Next

strThisDay = DateAdd("D",1,strThisDay)

Loop

Då har jag lärt mig hur DateAdd funkar, nu är det bara och vänta på att skolan ska sluta så man kan komma hem och prova..

J.N.Medlem sedan apr. 20031 660 inlägg
#8

HEJ!

Hulth skrev:

Enligt din sida är ju mitt "exempel" fel då.. :p

Ja, helt rätt. Citerade dig för att få ett utförligare svar, och sedan läste jag inte ordentligt. :OO

Men, du har faktiskt skrivit rätt på strNumberOfDays, förvillades nog av den. (fast fel funktion)

HulthMedlem sedan juni 2001272 inlägg
#9

J.N. skrev:

HEJ!

Hulth skrev:

Enligt din sida är ju mitt "exempel" fel då.. :p

Ja, helt rätt. Citerade dig för att få ett utförligare svar, och sedan läste jag inte ordentligt. :OO

Men, du har faktiskt skrivit rätt på strNumberOfDays, förvillades nog av den. (fast fel funktion)

Jodå, DateDiff lärde jag mig tidigare i tråden :)

@ndersMedlem sedan juni 200032 969 inlägg
#10

Varför prefixar du alla variabler med str även om de inte är strängar?

HulthMedlem sedan juni 2001272 inlägg
#11

@nders skrev:

Varför prefixar du alla variabler med str även om de inte är strängar?

Ful gammal vana.. Kör str framför dom flesta variablar av nån anledning..

@ndersMedlem sedan juni 200032 969 inlägg
#12

Ok, sluta upp med den ovanan då. :)

HulthMedlem sedan juni 2001272 inlägg
#13

@nders skrev:

Ok, sluta upp med den ovanan då. :)

Ska man lägga nåt annat prefix på variablar?

Kan inte dra mig till minnes varför jag började använda str i det sammanhanget, nu sitter det bara där och blir så automatiskt när man programmerar... :(

@ndersMedlem sedan juni 200032 969 inlägg
#14

Ungersk notation innebär att du ger variabelnamnen ett prefix som indikerar variabelns typ. Strängar kan du då prefixa med s eller str, heltal i / int (eller l / lng), boolean b / bln, etc.

Ska man prefixa så ska man väl kunna motivera prefixet, eller? :)

missModestyMedlem sedan apr. 2005254 inlägg
#15

Ett prefix för datum är dt. Finns säkert andra som används. Men det är bättre att helt slopa prefix än att använda samma till allt. Blir lurit för andra annars...

GuffaMedlem sedan juni 2004533 inlägg
#16

Hulth skrev:

Den bearbetning som ska göras är redan ganska tung, och det rullar på en dedikerad kraftigb burk enbart till detta syfte, så varför inte använda maskineriet lite? ;)

Varför använda maskineriet i onödan? Om bearbetningen redan är tung så blir det ju knappast bättre av att köra en fruktansvärd massa databasfrågor?

Varför ställa hundratals databasfrågor när det räcker med en enda?

Hämta alla poster mellan de två datumen och loopa igenom posterna:

Dim datDate1, datDate2
Dim strSQL

datDate1 = CDate(Request.Form("Date1"))
datDate2 = CDate(Request.Form("Date2"))

strSQL = "Select * from db where date between #" & datDate1 & "# and #" & datDate2 & "# order by date"
' öppna tabellen...

Do Until objRecSet1.EOF

' Skriva ut lite info om denna dagen osv, inget som berör databasen.

' bearbeta en massa tjafs

Loop
HulthMedlem sedan juni 2001272 inlägg
#17

Guffa skrev:

Varför använda maskineriet i onödan? Om bearbetningen redan är tung så blir det ju knappast bättre av att köra en fruktansvärd massa databasfrågor?

Varför ställa hundratals databasfrågor när det räcker med en enda?

Hämta alla poster mellan de två datumen och loopa igenom posterna:

Dim datDate1, datDate2
Dim strSQL

datDate1 = CDate(Request.Form("Date1"))
datDate2 = CDate(Request.Form("Date2"))

strSQL = "Select * from db where date between #" & datDate1 & "# and #" & datDate2 & "# order by date"
' öppna tabellen...

Do Until objRecSet1.EOF

' Skriva ut lite info om denna dagen osv, inget som berör databasen.

' bearbeta en massa tjafs

Loop

Jo, det är ju också ett alternativ, men i och med att det ska göras en del mellan varje hämtning ifrån databasen, och för att jag ska slippa sitta 20+ timmar och göra om bearbetningen är det "smidigaste" sättet för mig att loopa det så som jag har tänkt mig.

Säg att vi hämtar 1 dag, då görs det (ungefär) 4600 bearbetningar av informationen som finns i databasen.

Men håller på att studera dom (minst) två sätten detta är möjligt att genomföra, sen får jag väl slänga in en timer och kolla vilken som går snabbast, och den blir det.

130 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)