webForumDet fria alternativet

datum för veckodag som infaller under

ASP

52 svar · 870 visningar · startad av plelkes

Medlem sedan mars 2002823 inlägg
Frågan#1

Hej på er i sommarvärmen :p
Har sökt svaret men inget funnit:
Jag har 2 datum d1 och d2. Nu vill jag reda på vilken dag/datum som en viss veckodag infaller på (tex måndag)

Medlem sedan juni 200032 967 inlägg
#2

Vad har datumen med måndag att göra? Finns det en måndag mellan dessa två datum eller vad menar du?

Medlem sedan mars 2002823 inlägg
#3

@nders, det stämmer
Typ om jag tar perioden 18/6 - 25/6 i år då är 23:e en måndag.

Medlem sedan juni 200032 967 inlägg
#4

Lite snabbt ihopskrivet:

function GimmeMyMonday(dteDate1, dteDate2)
	intWeekday = Weekday(dteDate1, vbMonday)
	newdate = dateAdd("d", 7-intWeekday+1, dteDate1)
	if newdate <= dteDate2 then
		GimmeMyMonday = newdate
	else
		GimmeMyMonday = "ERROR!"
	end if
end function

Response.Write GimmeMyMonday (#2003-07-08#, #2003-07-18#)

Fråga mig inte om +1-kompenseringen i dateAdd(). Jag lär mig aldrig hur amerikanerna och deras datum fungerar. ;)

Hoppas det fjungerar.

Mvh

Medlem sedan mars 2002823 inlägg
#5

Tack @nders, men

Fråga mig inte om +1-kompenseringen i dateAdd(). Jag lär mig aldrig hur amerikanerna och deras datum fungerar

Vad har amerikanerna med vårt datum att göra??
Det verkar fungera så här, men inte när jag försöker ändra - kan bero påa tt jag inte fattar hur du tänker - förklara gärna koden mera utförligt

Medlem sedan juni 200032 967 inlägg
#6

Det är amerikaner som är skyldiga till veckodagsnummer och liknande i asp, och jag får helt enkelt aldrig kläm på det.

Du ska inte behöva ändra i funktionen, utan bara i anropet till den. Vad är det som blir fel?

Medlem sedan mars 2002823 inlägg
#7

Som sagt så vore jag tacksam för en förklaring rad för rad :birp ..

Det jag är ute efter egentligen är

midsommardagen den lördag som infaller under tiden den 20--26
juni

att ta reda på datumet för denna lördag

Medlem sedan juni 200032 967 inlägg
#8

Med lite kommentarer:

function GimmeMyMonday(dteDate1, dteDate2)
	[blue]' veckodagsnumret ska vi använda för
	' att kunna räkna ut hur många dagar vi
	' ska lägga till för att få det till måndag:[/blue]
	intWeekday = Weekday(dteDate1, vbMonday)
	[blue]' Vi skapar ett nytt datum, som blir måndagen
	' snarast efter datum1:[/blue]
	newdate = dateAdd("d", 7-intWeekday+1, dteDate1)
	[blue]' Nu ser vi till att kontrollera att det nya
	' datumet befinner sig i intervallet:[/blue]
	if newdate <= dteDate2 then
		GimmeMyMonday = newdate
	else
		GimmeMyMonday = "ERROR!"
	end if
end function

Lördag? Jag tyckte du sa måndag? ;)

Medlem sedan mars 2002823 inlägg
#9

Ledsen att jag skrev fel - men det är väl bara att ändra vbMunday till vbSaturday eller?

Medlem sedan juni 200032 967 inlägg
#10

Nej, vbMonday är en konstant som används för att säga att vi börjar våra veckor med måndag.

Prova istället att byta 7:an till en 5:a i DateAdd()-anropet.

Också måste du ju byta namn på funktionen. ;)

Mvh

Medlem sedan mars 2002823 inlägg
#11

som vanligt @nders ett jätte tack,
men

newdate = dateAdd("d", 7-intWeekday+1, dteDate1)

hur skall man komma på ovanstående kod :q

Medlem sedan juni 200032 967 inlägg
#12

Tja...

Man börjar med att försöka sätta sig in i hur datumfunktionerna i asp fungerar, och vad de returnerar. Sedan sätter man sig ner och testar en jäkla massa tills man får det att fungera.

Man tuggar igenom Microsofts VBScript-dokumentation och även det som finns på devguru, och sedan nöter man tangenter.

Som sagt, jag kan inte helt förklara för dig exakt hur datumfunktionerna fungerar, jag tycker inte att de är helt logiska.

Mvh

Medlem sedan sep. 20026 425 inlägg
#13

Ett steg i rätt riktning är att ladda ner VBScript v5.6-dokumentationen. Det kan du exempelvis göra här. :D
Sen har du en massa nyttigt och bra. :)

Medlem sedan mars 2002823 inlägg
#14

@nders:

Man börjar med att försöka sätta sig in i hur datumfunktionerna i asp fungerar, och vad de returnerar

Det är ju det jag försöker :x

Medlem sedan mars 2002823 inlägg
#15

Sen sist har jag

Man börjar med att försöka sätta sig in i hur datumfunktionerna i asp fungerar, och vad de returnerar. Sedan sätter man sig ner och testar en jäkla massa tills man får det att fungera. Man tuggar igenom Microsofts VBScript-dokumentation och även det som finns på devguru...

Men inte tycker jag att jag har blivit så mycket klokare...

Inte ens med facit ( @nders kodning) i handen fattar jag konstuktionen..
Fast så långt har jag i a f insett att det var mycket smart av @nders...
Jag tror mig förstå så långt att:

  1. bestämmer man vilken veckodag som perioden börjar på
  2. och sedan hur många veckodagar behöver man lägga till för att få en lördg

Har jag fattat rätt så här långt? :stud

Medlem sedan dec. 20003 887 inlägg
#16

Ta reda på vilken dag det är i veckan för det datum du söker. Ange att en normal vecka börjar med Måndag (= 1). Idag (2003-07-10) ger intWeekday = 4.

intWeekday = Weekday(dteDate1, vbMonday)

Vilket datum har kommande måndag? Det går 7 dagar på en vecka alltså är det 7 - intWeekday dagar kvar till sista dagen denna vecka, Söndag, och 7 - intWeekDay + 1 dagar kvar till kommande måndag.

newdate = dateAdd("d", 7-intWeekday + 1, dteDate1)

Vill du veta vilket datum måndagen den här veckan var, så går du tillväga på samma sätt ungefär. Skillnaden är att du går bakåt i tiden

newdate = dateadd("d" -intWeekDay + 1, dteDate1)

Så, du har väl greppet om hur funktionen fungerar :)

Medlem sedan mars 2002823 inlägg
#17

Om veckan börjar med en måndag, då är väl måndag dagnr1, torsdag dagnr 4 och idag fredag dag 5, eller hur?
MEN


dteDate = 2003-07-11
intWeekDay = WeekDay(dteDate, 2)
Response.Write intWeekDay

Ovanstående Returnerar " 3 " borde inte det vara 5??

Medlem sedan mars 2002823 inlägg
#18

2003-07-07 som ju är måndag - returnerar en 7:a
2003-07-08 = tisdag returnerar 6
dvs i fallande ordning
Hoppas ni kan förklara varför

Medlem sedan mars 2002823 inlägg
#19

Fattar inte vad som inte stämmer.
Om jag tar Engine^´s kod occh gör lite ändring:

Session.LCID = 1053
dteDate = 2003-07-10
intWeekDay = WeekDay(dteDate, vbMonday)
sWeekDayName = WeekDayName(intWeekDay)
Response.Write intWeekDay & " = " & sWeekDayName

Så får jag utskriften

4 = onsdag

Medlem sedan juni 200032 967 inlägg
#20

plelkes skrev:

Fattar inte vad som inte stämmer.
Om jag tar Engine^´s kod occh gör lite ändring:

Session.LCID = 1053
dteDate = 2003-07-10
intWeekDay = WeekDay(dteDate, vbMonday)
sWeekDayName = WeekDayName(intWeekDay)
Response.Write intWeekDay & " = " & sWeekDayName

Så får jag utskriften

4 = onsdag

Ange måndag som veckans första dag även då du använder WeekDayName():

sWeekDayName = WeekDayName(intWeekDay[b], ,vbMonday[/b])

Pga tidigare nämnd anledning kan jag tyvärr inte svara på dina andra varför-frågor nu.

Mvh

269 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)