webForumDet fria alternativet

datum för veckodag som infaller under

ASP

52 svar · 870 visningar · startad av plelkes · sida 2 av 3

Frågan, av plelkes

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)

Läs frågan i sin helhet →
Medlem sedan mars 2002823 inlägg
#21

Men alltså - jag blir galen
Om jag ändrar till

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

så får jag som det borde

4 = torsdag

men:

dteDate = 2003-07-07

ger

7 = söndag

och

dteDate = 2003-07-11

ger

dteDate = 2003-07-11

Fattar inte ett dugg*snyftsnyft*

Medlem sedan mars 2002823 inlägg
#22

felskrivet förrut:

dteDate = 2003-07-11

ger

3 = onsdag

Medlem sedan mars 2002823 inlägg
#23

felskrivet förrut:

dteDate = 2003-07-11

ger

3 = onsdag

Medlem sedan mars 2002823 inlägg
#24

Blir bara mystiskare och mystiskare om jag tar koden

<%
<%
Session.LCID = 1053
dteDate = 2003-07-11
intWeekDay = WeekDay(dteDate, vbMonday)
sWeekDayName = WeekDayName(intWeekDay,,vbMonday)
Response.Write dteDate & "<BR>"
Response.Write intWeekDay & " = " & sWeekDayName

och ändrar datumer manuellt -Så blir allt det bra ENDAST för torsdagar i juli-03. Ni kan själva se detta Om jag däremot gör om det hela till en formulär för datum ändring

<FORM ACTION="" METHOD="post">
<TABLE WIDTH="500" BORDER="3" CELLSPACING="5" CELLPADDING="5">
  <TR> 
    <TD>Välj datum (ÅÅÅÅ-MM-DD):</TD>
      <TD><INPUT NAME="year" TYPE="text" SIZE="75"></TD>
  </TR>
  <TR ALIGN="RIGHT" VALIGN="MIDDLE"><TD><INPUT NAME="in" TYPE="submit" VALUE="Visa vald datum"></TD></TR>
</TABLE>
<%
Session.LCID = 1053
dteDate = Request.Form("year")
intWeekDay = WeekDay(dteDate, vbMonday)
sWeekDayName = WeekDayName(intWeekDay,,vbMonday)
Response.Write dteDate & "<BR>"
Response.Write intWeekDay & " = " & sWeekDayName
%>

då funkar det perfekt. Ni kan själva prova detta

Medlem sedan mars 2002823 inlägg
#25

ngn som har lösningen till detta??

Medlem sedan juni 200032 967 inlägg
#26

När du i koden specificerar datumet, så måste du ha någonting runt. Du kan använda # för att det ska vara datumtyp.

dteDate = #2003-07-11#

Annars är det samma sak som att skriva dteDate = 1985.

Mvh

Medlem sedan mars 2002823 inlägg
#27

tack @nders, nu kan jag äntligen fortsätta längs den snåriga stigen mot att bemästra datum med VBScript

Medlem sedan juni 200032 967 inlägg
#28

Varsågod, och lycka till i fortsättningen!

Medlem sedan mars 2002823 inlägg
#29

tack, räknar med att behöva hjälp även i fortsättningen, och hoppas få det med

Medlem sedan mars 2002823 inlägg
#30

Nu har jag gjort lite modifieringar

function GeAllhelgon(dteDate)
'//alla helgons dag den lördag som infaller under tiden den 31 oktober--den 6 november
'//först skall vi ta reda på vilken veckodag som 31 okt är, för att
'//sedan skall vi ta reda på hur många dagar vi behöver lägga till för att få en lördag.
'//Med den "inbyggda" funktion Weekday() tar vi reda på vilken veckodag som 20:e är
dteDate = #1999-10-31#
intWeekday = Weekday(dteDate, vbMonday)

'//NU skall vi räkna ut hur många dagar vi behöver lägga till för att få en lördag. Detta gör vi med den
'//inbyggda funktionen "DateAdd(interval, number, date)"
'//Det går 7 dagar på en vecka. Alltså är det 7 - intWeekDay dagar kvar till sista dagen denna vecka.
'//Vi söker ju en lördag, därför får vår vecka sluta med en lördag, dvs börja med en söndag:
dteDate = #1999-10-31#
intWeekday = WeekDay(dteDate, vbSunday)
newdate = dateAdd("d", 7-intWeekDay, dteDate)
GeAllhelgon = newdate
end function
Response.Write GeAllhelgon(dteDate)

Har provat för flera olika datum, och verkar fungera. Hoppas det inte bara är tur - för nu fattar jag iaf hur jag gjort och varför

Medlem sedan mars 2002823 inlägg
#31

Som sagt så fungerar ovanstående kod..
Men jag skulle villja ha det lite mera dynamiskt, så att man får välja årtalet med följande kod

Session.LCID = 1053
function GeAllhelgon(dteDate)

dteDate = year & -10 & -31
year = Request.Form("year")
intWeekday = WeekDay(dteDate, vbSunday)
newdate = dateAdd("d", 7-intWeekDay, dteDate)
GeAllhelgon = newdate
end function
Response.Write GeAllhelgon(dteDate)

får jag följande felutskrifter

Microsoft VBScript runtime error '800a01c2'
Wrong number of arguments or invalid property assignment: 'year'

Har provat "alla möjliga och omöjliga sätt" men går bet på+t

Medlem sedan juni 200032 967 inlägg
#32

Det finns en funktion som heter year, så kalla din variabel för något annat.

Mvh

Medlem sedan mars 2002823 inlägg
#33

när jag ändrar till

Session.LCID = 1053
function GeAllhelgon(dteDate)

dteDate = ar & -10 & -31
ar = Request.Form("year")
intWeekday = WeekDay(dteDate, vbSunday)
newdate = dateAdd("d", 7-intWeekDay, dteDate)
GeAllhelgon = newdate
end function
Response.Write GeAllhelgon(dteDate)

¨får jag fel:

Microsoft VBScript runtime error '800a000d'
Type mismatch: 'dteDate'

Medlem sedan juni 200032 967 inlägg
#34

In med lite citationstecken:

dteDate = ar & "-10" & "-31"

Kanske måste du använda CDate() på uttrycket också.

Mvh

Medlem sedan mars 2002823 inlägg
#35

den gamla CDate()löste det hela :birp

Medlem sedan mars 2002823 inlägg
#36

Nu har jag följande kod

Session.LCID = 1053
function GeAllhelgon(dteDate)
ar = 2003
dteDate = ar & "-10" & "-31"
dteDate = CDate(dteDate)
intWeekday = WeekDay(dteDate, vbSunday)
newdate = dateAdd("d", 7-intWeekDay, dteDate)
GeAllhelgon = newdate
end function

Response.Write GeAllhelgon(dteDate) & "<BR>"
iWeekDay = DatePart("w",GeAllhelgon(dteDate))

 Response.Write iWeekDay & "<BR>"
 Response.Write WeekDayName(iWeekDay)

Har testat för ca 10 år, och får rätt datum och dagnam M E N Response.Write i WeekDay returnerar en 7 i stället för en 6:a
Vad att göra? - skall jag bara strunta i detta, då det iaf blir rätt namn?

Medlem sedan mars 2002823 inlägg
#37

Eller det kanske kommer av att jag tidigare på raderna har angivit att veckan börjar med söndag och då blir ju lördag dag 7

Medlem sedan juni 200032 967 inlägg
#38

plelkes skrev:

Eller det kanske kommer av att jag tidigare på raderna har angivit att veckan börjar med söndag och då blir ju lördag dag 7

Det stämmer. Det står ett par rader om det hos DevGuru, i botten vid FirstDayOfWeek.

Mvh

Medlem sedan mars 2002823 inlägg
#39

Jag känner att snart blir jag galen!!! När jag väl TROR att jag förtår ngt - så hamnar jag tillbaka på 0 igen*grrrr'snyft*
Vad är skillnaden - (för jag ser det inte själv) mellan fungerande:

Session.LCID = 1053
ar = 1975
nyard = ar & "-01" & "-01"
nyard = CDate(nyard)
iWeekDay = DatePart("w", nyard, 2)
Response.Write "Nyårsdagen =  " 
Response.Write WeekDayName(iWeekDay, ,2) & "en den  " 
Response.Write nyard

och icke fungerande

Session.LCID = 1053
function NewYearday(dteDate)
ar = 1999
dteDate = ar & "-01" & "-01"
dteDate = CDate(dteDate)
End function

Response.Write NewYearday(dteDate)
iWeekDay = DatePart("w", NewYearday(dteDate), 2)
Response.Write "Nyårsdagen =  " 
Response.Write WeekDayName(iWeekDay, ,vbMonday) & ":en   "

Den senaste ger fel dag och skriver inte ut datumet

Medlem sedan juni 200032 967 inlägg
#40

Till att börja med; du måste returnera datumet från funktionen också.

NewYearday = CDate(dteDate)

Jag hade också sett till att funktionen tog året som parameter, och använde det. Så här borde hela klabbet se ut:

Session.LCID = 1053
function NewYearday(intYear)
dteDate = intYear & "-01" & "-01"
NewYearday = CDate(dteDate)
End function

dteNewYearDay = NewYearday(1999)
Response.Write dteNewYearDay
iWeekDay = DatePart("w", dteNewYearDay, 2)
Response.Write "Nyårsdagen =  " 
Response.Write WeekDayName(iWeekDay, ,vbMonday) & ":en   "

Fungerar det bättre då?

Mvh

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