Hej, jag behöver en rutin som listar från dagens datum (eller något annat) en hel månads alla dagar förutom lördag och söndag och får inte riktigt till det. Jag känner att denna inte är idiotsäker och det måste den vara. Litet annat exempel: Hejsan Lol...om du har en webkamera eller en scanner, en mekanisk bladbläddrare byggd i mekano, en ica-kalender för varje år från 1990-2010, en mikrofon samt ett kyrktorn som slår varje hel timme i närheten så kan du lösa problemet....Sickan har en plan... Tack så mycket för er hjälp. De verkar fungera bra. Dock blev jag förvånad över andreas konstanter vbSunday, vbSaturday. I VB respektive ASP blev det fel dagar då asp ville ha 6,1 och inte 6,7.Behöver lista 1 månads alla dagar
Rutinen måste klara skottår, årsövergångar och inte minst bli rätt. Är det någon som har en sådan rutin, kan optimera och finna de fel som förekommer?
Jag skulle även vilja skicka in en parameter för antalet dagar som skall visas, alltså inte från och tilldatum. Nu finns dock en sådan men jag tror denna rutin kan vara användbar för fler ändamål.
<code>
<%
Function NumDays(dtSelected)
'******* Function accepts a date
datetime = dateadd("d", -datepart("d",dtSelected)+1,dtSelected)
datetime = dateadd("m", 1, datetime)
datetime = dateadd("d", -1, datetime)
NumDays = datepart("d",datetime)
end function
%>
<html>
<head>
<title>31 dagar framåt</title>
</head>
<%
Sub DrawCalendar
startdate = "2004-02-11"
' startparametrar
currentmonth = month(startdate)
currentday = day(startdate)
' slutparametrar
endmonth = month(dateadd("m", 1, startdate))
endday = day(dateadd("m", 1, startdate))
' om årsskrifte
if endmonth < startmonth then
' då får vi göra lite annorlunda, men vad?
end if
dtyear = year(dateadd("yyyy",0,startdate))
dtdate = dateserial(dtyear,i,1)
startmonth = monthname(datepart("m",dtdate))
for i = currentmonth to currentmonth + 1
dtdate = dateserial(dtyear,i,1)
strdate = month(i)
intdays = numdays(dtdate)
response.write monthname(datepart("m",dtdate)) & " " & dtyear
response.write "<br>"
for j = currentday to intdays
showdays = showdays + 1
' månadsbyte
if monthname(datepart("m",dtdate)) <> startmonth then
if endmonth = 1 then
' ett årsskifte
currentday = 1
j = 1
if monthname(datepart("m",dtdate)) = "februari" then exit for
else
currentday = 1
end if
end if
' visa bara 31 dagar framåt i listan
if showdays > 31 then exit for
startmonth = monthname(datepart("m",dtdate))
dagnamn = weekdayname(weekday(dtDate))
if dagnamn <> "söndag" and dagnamn <> "lördag" then
lstDateList = lstDateList & "<option value=''>" & startmonth & dagnamn & "</option>" & vbCrLf
response.write weekdayname(weekday(dtDate))&" - "
response.write j & " " & startmonth & "<br>"
end if
dtDate = dateAdd("d",1,dtDate)
next
next
end Sub
' ritar ut de dagar så man kan debugga
DrawCalendar
%>
</body>
</html>
</code>
Tack på förhandSv: Behöver lista 1 månads alla dagar
<code>
Sub DrawCalendar(FirstDate)
Dim Value
Dim LastMonth
Dim CurrentMonth
FirstDate = CDate(FirstDate)
For Value = FirstDate To DateAdd("d", 31, FirstDate)
Select Case WeekDay(Value)
Case vbSunday, vbSaturday
Case Else
If LastMonth <> Month(Value) Then
CurrentMonth = monthname(Month(Value))
Debug.Print CurrentMonth & " " & Year(Value)
LastMonth = Month(Value)
End If
Debug.Print weekdayname(WeekDay(Value)) & " - " & Day(Value) & " " & CurrentMonth & "<br>"
End Select
Next
End Sub
</code>Sv: Behöver lista 1 månads alla dagar
Du har inte access till en SQL Server 2000 i systemet.. I såfall är det lätt att fixa en UDF som returnerar ett recordset med det du vill ha och låta SQL:en fixa problemen med skottår mm..
Detta exempel listar upp alla veckor på ett år..
CREATE FUNCTION dbo.fnYearweeks
(
@Year int
)
RETURNS @Weeks table([Week] int)
AS
BEGIN
DECLARE @Datecounter datetime
SET @Datecounter = CONVERT(varchar(4), @Year) + '-01-01'
WHILE DATEPART(yy, @Datecounter) = @Year
BEGIN
INSERT @Weeks ([Week]) VALUES (DATEPART(wk, @Datecounter))
SET @Datecounter = DATEADD(dd, 7, @Datecounter)
END
RETURN
END
Kom ihåg att använda SET DATEFIRST till rätt parameter
MickeSv: Behöver lista 1 månads alla dagar
F'låt, kunde inte låta bli, SQL-serverlösningen var helt ok, men den kändes lite...icke-optimal... :-)Sv: Behöver lista 1 månads alla dagar