webForumDet fria alternativet

Datumtraggel

27 svar · 571 visningar · startad av peppar

pepparMedlem sedan dec. 2001873 inlägg
#1

Har varit uppe förut, men detta förbryllar mig en aning.

Jag vill ta ut veckonumret med hjälp av ett datum i formatet
2003-03-07. Använder just nu, där variabeln thisDate innehåller t.ex 2003-01-07

datepart("ww", thisDate,2)

Resultatet blir ju att 2003-01-01 blir vecka 0 (då det borde vara 1) och 2003-12-29 kan den alls med, då slutar scriptet helt att funger och inte ens ett felmeddelande kommer upp?

Vad är fel?

@ndersMedlem sedan juni 200032 969 inlägg
#2

Var kommer thisdate ifrån? Är du säker på att datumet verkligen är av subtypen datum?

SebbeMedlem sedan jan. 20032 285 inlägg
#3

Som @nders sa, är den av subtypen datum? Annars kanske

DatePart("ww", CDate(thisDate), 2)

hjälper?

pepparMedlem sedan dec. 2001873 inlägg
#4

Fungerar inte detta?

thisDate = cdate(request.form("byDate"))
@ndersMedlem sedan juni 200032 969 inlägg
#5

Jo, det ska det göra.

Mer kod? Hur ser resten av kodraden från första inlägget ut?

pepparMedlem sedan dec. 2001873 inlägg
#6
	'## Hämta datumet som sökts och konvertera till dom variabler som behövs för att genomföra sökningen

	thisDate = cdate(request.form("byDate"))
	yearNo = left(cdate(thisDate),4)
	weekNo = datepart("ww", cdate(thisDate),2)
	Response.Write weekNo

	'## Loopa årets alla månader och kolla vilken vecka som hör med vilken från databasen
	y = 0 '## årets veckor
	xy= 0 '## databasens veckor
	
	do until y = 52
	
		y = y	+1
		xy = xy	+1
		
		if y = weekNo Then thisWeeksMenu = xy-1
		if xy > 3 then xy =1
		'Response.Write xy &", "& y &"<br>"
	
	loop 
	'response.write thisWeeksMenu 

	'## hämta datum aktuell vecka
	firstDate = cdate(getDateFromWeek(yearNo,weekNo))
	lastDate = firstDate + 6
	
	'## skall vi loopa ut hela veckan?
	weekAll = request.form("weekAll")
	'## loopa genom alla datum i veckan, men skriv bara ut det gällande
	
	'## hämta aktuell vecka från databasen
	sql1 = "select * from meny where menVecka = "& thisWeeksMenu &" "
	'response.write sql1
	set RSget = Conn.Execute(sql1)
@ndersMedlem sedan juni 200032 969 inlägg
#7

Prova detta:

	thisDate = cdate(request.form("byDate"))
	yearNo = year(thisDate)
	weekNo = datepart("ww", thisDate, 2, 2)
	Response.Write weekNo

Mvh

pepparMedlem sedan dec. 2001873 inlägg
#8

Då vill den inte alls, får inte ens ett felmeddelande...!

(?)

Är du med på vad jag vill åstadkomma? Skall jag förklara...? Om det hjälper?

@ndersMedlem sedan juni 200032 969 inlägg
#9

Börja med bara de fyra raderna, att få dem att fungera, så kan vi haka på resten sen.

Du har väl inte on error resume next på sidan? Exakt vad innehåller request.form("byDate")?

pepparMedlem sedan dec. 2001873 inlägg
#10

Nej, jag har inte On Error.

Fick det att fungera, provade först på servern, sedan lokal och sedan mot servern igen och då ploppade det igång.

Dina fyra rader fungerar... Själklart :e

Men nu räkar den fel veckor istället (tack vare ditt "rätta" sätt att kolla datumen ;) )

Skall bena lite i det och se vad jag kan åstadkomma...

@ndersMedlem sedan juni 200032 969 inlägg
#11

Hur menar du med "räknar fel veckor"?

pepparMedlem sedan dec. 2001873 inlägg
#12

Om scriptet tar emot datumet 2001-01-01 är kalenderveckan 01 och databasveckan (kan endast vara 1,2 eller 3) 0 , då databasveckan borde vara 1

så här borde det se ut:

db | kalender
1 - 1
2 - 2
3 - 3
1 - 4
2 - 5
3 - 6
1 - 7
2 - 8
3 - 9
osv... fram till kalendervecka 52

Är du med? är det luddigt?

@ndersMedlem sedan juni 200032 969 inlägg
#13

Jag vet inte om jag är helt med på vad du menar, men jag gör ett litet försök med operatorn mod. Prova detta:

	'## Loopa årets alla månader och kolla vilken vecka som hör med vilken från databasen
	for y = 1 to 52
		thisWeeksMenu = y mod 3
		'Response.Write xy &", "& y &"<br>"
	next

istället för

	'## Loopa årets alla månader och kolla vilken vecka som hör med vilken från databasen
	y = 0 '## årets veckor
	xy= 0 '## databasens veckor
	
	do until y = 52
	
		y = y	+1
		xy = xy	+1
		
		if y = weekNo Then thisWeeksMenu = xy-1
		if xy > 3 then xy =1
		'Response.Write xy &", "& y &"<br>"
	
	loop

Men, som sagt, lite klurigt, eftersom jag inte helt förstår vad du menar.

r:/ Response.write-satsen i loopen får du gåra något med också. ;)

mvh

pepparMedlem sedan dec. 2001873 inlägg
#14

Jag har ett tre-veckors (rullande) schema som ligger i en databas. Varje vecka (i databasen) har ett veckonummer 1,2 eller 3. Varje vecka har sju poster. Ingen av posterna (dagarna) är märkta med datum. Jag vill rulla detta schema över kalenderårets alla veckor. Inga bekymmer så långt.
Men, om jag nu vill titta vad som händer den 21:a maj till exempel så måste jag "manuellt" räkna framåt i veckorna som ligger i databasen eftersom dom inte är märkta med datum. Klurigt tycker jag, kanse borde det inte vara det...?

:r Jag är väldigt dålig på att uttrycka/förklara i ord vad jag menar, men jag skickar en länk med PM till dig @nders så kan du titta på ett exempel på hur det fungerar i praktiken.

@ndersMedlem sedan juni 200032 969 inlägg
#15

Jag tror jag förstår hur du menar. Denna kod borde vara tillräcklig (att byta mot hela klabbet i tidigare inlägg):

	thisDate = cdate(request.form("byDate"))
	yearNo = year(thisDate)
	weekNo = datepart("ww", thisDate, 2, 2)

	intDatabaseWeek = weekNo mod 3 + 1

	'## hämta aktuell vecka från databasen
	sql1 = "select * from meny where menVecka = "& intDatabaseWeek
	set RSget = Conn.Execute(sql1)

Mvh,

pepparMedlem sedan dec. 2001873 inlägg
#16

:r Så enkelt det kan vara. Men ändå inte. :x

Så här blir resultatet.

Kalender vecka 1 blir DBvecka 2
Kalender vecka 2 blir DBvecka 3
Kalender vecka 3 blir DBvecka 1
Kalender vecka 4 blir DBvecka 2

Borde vara

Kalender vecka 1 blir DBvecka 1
Kalender vecka 2 blir DBvecka 2
Kalender vecka 3 blir DBvecka 3
Kalender vecka 4 blir DBvecka 4

Den ligger ett steg före, eller vad man nu kan säga? Vad kan det bero på?

@ndersMedlem sedan juni 200032 969 inlägg
#17

Det är inte så konstigt att det blir så, eftersom koden ser ut som den gör. Jag slänger lite huvudbry och återkommer inom kort.

mvh,

@ndersMedlem sedan juni 200032 969 inlägg
#18

Hmm. Borde inte det här fjungera:

intDatabaseWeek = (weekNo-1) mod 3 + 1

Mvh,

pepparMedlem sedan dec. 2001873 inlägg
#19

Men, hallå där! :o

Det är väl inte så konstigt att den ligger ett före

intDatabaseWeek = weekNo mod 3 [b]+ 1[/b]

Tog bort +1 och den dansar i takt. Har inte testet hur det blir mot vecka 52 osv, men det borde äl inte vara någon skillnad... eller?

pepparMedlem sedan dec. 2001873 inlägg
#20
intDatabaseWeek = (weekNo-1) mod 3 + 1

gerkalendervecka 1 och databasvecka 0

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