Avatar billede jonmh Nybegynder
26. januar 2005 - 22:19 Der er 7 kommentarer og
3 løsninger

Kalender viser forkerte ugedage

Jeg er i gang med at lave en hjemmeside og har i den forbindelse fået sat en kalender ind, men jeg opdagede lige at lige så snart man skifter måned f.eks til februar vises datoerne ikke under de rigtige ugedage.
Den direkte url til siden er: www.marstalsejlklub.dk/kalender.asp.

Håber der er nogen der kan forklare mig hvad problemet er.


Sourcecode:

<%@ LANGUAGE=VBScript %>
<!--#INCLUDE FILE="adovbs.asp"-->
<!--#INCLUDE FILE="objadodb.asp"-->
<%

Dim Resul,SQL,link

' ------------------------------------------------------------------------------------
' Link til side med nærmere beskrivelse
'-------------------------------------------------------------------------------------
link = "events.htm"

SQL = " SELECT * FROM kalender "
SET Resul = database.execute(SQL)

%><%
Function GetDaysInMonth(iMonth, iYear)
    Select Case iMonth
        Case 1, 3, 5, 7, 8, 10, 12
            GetDaysInMonth = 31
        Case 4, 6, 9, 11
            GetDaysInMonth = 30
        Case 2
            If IsDate("February 29, " & iYear) Then
                GetDaysInMonth = 29
            Else
                GetDaysInMonth = 28
            End If
    End Select
End Function

Function GetWeekdayMonthStartsOn(iMonth, iYear)
    GetWeekdayMonthStartsOn = WeekDay(CDate(iMonth & "/1/" & iYear))
End Function

Function SubtractOneMonth(dDate)
Dim iDay, iMonth, iYear   
    iDay = Day(dDate)
    iMonth = Month(dDate)
    iYear = Year(dDate)

    If iMonth = 1 Then
        iMonth = 12
        iYear = iYear - 1
    Else
        iMonth = iMonth - 1
    End If
   
    If iDay > GetDaysInMonth(iMonth, iYear) Then iDay = GetDaysInMonth(iMonth, iYear)

    SubtractOneMonth = CDate(iMonth & "-" & iDay & "-" & iYear)
End Function

Function AddOneMonth(dDate)
Dim iDay, iMonth, iYear   
    iDay = Day(dDate)
    iMonth = Month(dDate)
    iYear = Year(dDate)

    If iMonth = 12 Then
        iMonth = 1
        iYear = iYear + 1
    Else
        iMonth = iMonth + 1
    End If
   
    If iDay > GetDaysInMonth(iMonth, iYear) Then iDay = GetDaysInMonth(iMonth, iYear)

    AddOneMonth = CDate(iMonth & "-" & iDay & "-" & iYear)
End Function

Function FormatMonthName(dMonth)
  If dMonth = 1 Then FormatMonthName = "Januar"
  If dMonth = 2 Then FormatMonthName = "Februar"
  If dMonth = 3 Then FormatMonthName = "Marts"
  If dMonth = 4 Then FormatMonthName = "April"
  If dMonth = 5 Then FormatMonthName = "Maj"
  If dMonth = 6 Then FormatMonthName = "Juni"
  If dMonth = 7 Then FormatMonthName = "Juli"
  If dMonth = 8 Then FormatMonthName = "August"
  If dMonth = 9 Then FormatMonthName = "September"
  If dMonth = 10 Then FormatMonthName = "Oktober"
  If dMonth = 11 Then FormatMonthName = "November"
  If dMonth = 12 Then FormatMonthName = "December"
End Function

Dim dDate    ' Date we're displaying calendar for
Dim iDIM      ' Days In Month
Dim iDOW      ' Day Of Week that month starts on
Dim iCurrent  ' Variable we use to hold current day of month as we write table
Dim iPosition ' Variable we use to hold current position in table

If IsDate(Request.QueryString("date")) Then
    dDate = CDate(Request.QueryString("date"))
Else
    If IsDate(Request.QueryString("month") & "-" & Request.QueryString("day") & "-" & Request.QueryString("year")) Then
        dDate = CDate(Request.QueryString("month") & "-" & Request.QueryString("day") & "-" & Request.QueryString("year"))
    Else
        dDate = Date()
    End If
End If

iDIM = GetDaysInMonth(Month(dDate), Year(dDate))
iDOW = GetWeekdayMonthStartsOn(Month(dDate), Year(dDate))
%>

<html>

    <!-- #BeginTemplate "index.htt" -->

        <head>
            <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
            <meta name="generator" content="Adobe GoLive 6">
            <title>Marstal Sejlklub</title>
            <link href="style.css" rel="stylesheet" media="screen">
            <SCRIPT type=text/javascript src="menu.js"></SCRIPT>
            <!-- #BeginHeadLocked "" -->
                <link href="style.css" rel="stylesheet" media="screen">
                <SCRIPT type=text/javascript src="menu.js"></SCRIPT>
            <!-- #EndHeadLocked -->
        </head>

        <body bgcolor="#0d004c" onload="visMenu('menu6',true)">
            <table width="790" border="0" cellspacing="0" cellpadding="0">
                <tr>
                    <td colspan="3"><img src="top6.jpg" alt="" height="225" width="790" border="0"></td>
                </tr>
                <tr>
                    <td align="center" valign="top" width="241">
                        <table class="border" width="241" border="0" cellspacing="0" cellpadding="0" height="450">
                            <tr>
                                <td rowspan="3" width="10"></td>
                                <td rowspan="3" colspan="2" align="left" valign="top">
                                    <DIV id=leftcol>
                                        <DIV id=mainMenu>
                                            <UL id=menuList>
                                                <LI class=menubar><A href="index.html">Startsiden</A>
                                                <UL class=menu id=menu1>
                                                    <LI><A href="aftenkap.html">Aftenkapsejlads</A>
                                                    <LI><A href="kontakt.html">Kontakt</A>
                                                </UL>
                                                </LI>
                                                <LI class=menubar><A href="java script:visMenu('menu2',true)">Ungdomsafdelingen</A>
                                                <UL class=menu id=menu2>
                                                    <LI><A href="optimist.html">Optimister</A>
                                                    <LI><A href="pirat.html">Piratjoller</A></LI>
                                                </UL>
                                                <LI class=menubar><A href="java script:visMenu('menu3',true)">Udvalg</A>
                                                <UL class=menu id=menu3>
                                                    <LI><A href="optimistudv.html">Optimistudvalg</A>
                                                    <LI><A href="sejladsudv.html">Sejladsudvalg</A>
                                                    <LI><A href="juniorudv.html">Juniorudvalg</A>
                                                    <LI><A href="roudv.html">Roudvalg</A>
                                                    <LI><A href="klubhusudv.html">Klubhusudvalg</A>
                                                    <LI><A href="festudv.html">Festudvalg</A>
                                                    <LI><A href="pladsudv.html">Kran/plads udvalg</A>
                                                    <LI><A href="haveudv.html">Haveudvalg</A>
                                                    <LI><A href="klubmaal.html">Klubmåler</A></LI>
                                                </UL>
                                                <LI class=menubar><A href="ballonindex.asp">Ballonen</A>
                                                <UL class=menu id=menu4>
                                                        <LI><A href="ballonen/ballonarkiv.html">Arkiv</A>
                                                </UL>
                                                <LI class=menubar><A href="besty.html">Bestyrelsen</A></LI>
                                                <LI class=menubar><A href="java script:visMenu('menu5',true)">Arrangementer</A>
                                                <UL class=menu id=menu5>
                                                    <LI><A href="kalender.asp">Kalender</A></LI>
                                                </UL>
                                                <LI class=menubar><A href="java script:visMenu('menu6',true)">Billeder</A>
                                                <UL class=menu id=menu6>
                                                    <LI><A href="billeder/soeg.html">Søg</A></LI>
                                                </UL>
                                                <LI class=menubar><A href="kisten.html">Skibskisten</A>
                                                <UL class=menu id=menu7>
                                                    <LI><A href="skibskisten/annoncer.html">Annoncer</A>
                                                    <LI><A href="skibskisten/tilfoej.html">Tilføj annonce</A>
                                                    <LI><A href="skibskisten/soeg.html">Søg</A></LI>
                                                </UL>
                                                <LI class=menubar><A href="java script:visMenu('menu8',true)">Roafdelingen</A>
                                                <UL class=menu id=menu8>
                                                    </LI>
                                                </UL>
                                                <LI class=menubar><A href="java script:visMenu('menu9',true)">Turberetning</A>
                                                <UL class=menu id=menu9>
                                                    <LI><A href="turberet/soeg.html">Søg</A></LI>
                                                </UL>
                                                <LI class=menubar><A href="sitemap.html">Sitemap</A></LI>
                                                </LI>
                                            </UL>
                                        </DIV>
                                    </DIV>
                                </td>
                            </tr>
                            <tr>
                           
                        </tr>
                            <tr>
                           
                        </tr>
                        </table>
                    </td>
                    <td colspan="2" align="left" valign="top"><!-- #BeginEditable "Region" -->
                            <table class="border2" width="549" border="0" cellspacing="0" cellpadding="0" height="450">
                                <tr>
                                    <td rowspan="3" width="10"></td>
                                    <td rowspan="3" colspan="2" align="center" valign="top"><br>
                                        <table width="90%" border="0" cellspacing="2" cellpadding="0">
                                            <tr>
                                                <td colspan="2"><A HREF="kalender.asp?date=<%= SubtractOneMonth(dDate) %>">&lt;--</A></td>
                                                <td colspan="3" align="center"><span class="broedtext"><%= FormatMonthName(Month(dDate)) & "  " & Year(dDate) %></span></td>
                                                <td colspan="2" align="right"><A HREF="kalender.asp?date=<%= AddOneMonth(dDate) %>" style="color: #FFFFFF">--&gt;</A></td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <div align="center">
                                                        <span class="broedtext">Mandag</span></div>
                                                </td>
                                                <td>
                                                    <div align="center">
                                                        <span class="broedtext">Tirsdag</span></div>
                                                </td>
                                                <td>
                                                    <div align="center">
                                                        <span class="broedtext">Onsdag</span></div>
                                                </td>
                                                <td>
                                                    <div align="center">
                                                        <span class="broedtext">Torsdag</span></div>
                                                </td>
                                                <td>
                                                    <div align="center">
                                                        <span class="broedtext">Fredag</span></div>
                                                </td>
                                                <td>
                                                    <div align="center">
                                                        <span class="broedtext">L&oslash;rdag</span></div>
                                                </td>
                                                <td>
                                                    <div align="center">
                                                        <span class="broedtext">S&oslash;ndag</span></div>
                                                </td>
                                            </tr>
                                            <%

if iDOW = 1 Then iDOW = 8

If iDOW <> 1 Then
    Response.Write(vbTab & "<tr>" & vbCrLf)
    iPosition = 2   
    Do While iPosition < iDOW
        Response.Write(vbTab & vbTab & "<td>&nbsp;</td>" & vbCrLf)
        iPosition = iPosition + 1
    Loop
End If

    '-- Write days of month in proper day slots --

iCurrent = 1
iPosition = iDOW-1

Do While iCurrent <= iDIM


    '-- open the table row --

    If iPosition = 1 Then
        Response.Write(vbTab & "<tr>" & vbCrLf)
    End If


    '-- Write the date and subject --

    Response.Write(vbTab & vbTab & "<td align=left valign=top height=60 class='kalender' width='11%'><span><b>&nbsp;" & iCurrent & "</b></span>")
       
  resul.movefirst
  Do While NOT Resul.EOF     

      If Resul("Year") = Year(dDate) Then
        If Resul("Month") = Month(dDate) Then

        If Resul("Day") = iCurrent Then
        Response.Write("<br><span class=broedtekst><center>" & resul("overskrift") & "</center></span><br>")
        End If

        End If
    End If

      resul.MoveNext

    Loop

  Response.Write("</td>" & vbCrLf)


    '-- Close the table row --

    If iPosition = 7 Then
        Response.Write vbTab & "</tr>" & vbCrLf
        iPosition = 0
    End If

   
    '-- Increment variables --

    iCurrent = iCurrent + 1
    iPosition = iPosition + 1
Loop

If iPosition <> 1 Then
    Do While iPosition <= 7
        Response.Write(vbTab & vbTab & "<td>&nbsp;</td>" & vbCrLf)
        iPosition = iPosition + 1
    Loop
    Response.Write vbTab & "</TR>" & vbCrLf
End If

%>
                                        </table>
                                    </td>
                                </tr>
                                <tr></tr>
                                <tr></tr>
                            </table>
                        <!-- #EndEditable --></td>
                </tr>
                <tr>
                    <td width="241"></td>
                    <td width="550"></td>
                    <td></td>
                </tr>
            </table>
            <p></p>
        </body>

    <!-- #EndTemplate -->

</html>
Avatar billede babz Nybegynder
26. januar 2005 - 23:24 #1
Det ligner grangiveligt en off by one error.
Der er et eller andet sted hvor der mangler præcis een, og umiddlebart ser jeg ikke hvor .

Desværre
/Babz
Avatar billede softspot Forsker
26. januar 2005 - 23:31 #2
Er der nogen grund til at lave dette check

If iDOW <> 1 Then
    Response.Write(vbTab & "<tr>" & vbCrLf)
    iPosition = 2   
    Do While iPosition < iDOW
        Response.Write(vbTab & vbTab & "<td>&nbsp;</td>" & vbCrLf)
        iPosition = iPosition + 1
    Loop
End If

når du umiddelbart inden laver dette

if iDOW = 1 Then iDOW = 8

for det første check vil vel altid evaluere til true, eller...?

Grunden til at jeg slår ned på netop denne kode er, at min mistanke går på den funktion der hedder GetWeekdayMonthStartsOn og den variabel som dannes på grundlag af denne funktion, iDOW. Jeg siger ikke der er noget i vejen med funktionen, men bare at det er lidt svært for mig at gennemskue hvorfor du behandler outputtet som du gør (måske fordi jeg er ved at være træt :)).

Anyways! Jeg vil bare afslutte for idag, med at spørge: er du opmærksom på at WeekDay returnerer 0 for søndag, 1 for mandag og så fremdeles...? Vil det evt. have nogen indflydelse på hvordan du behandler outputtet fra den førnævnte funktion?
Avatar billede softspot Forsker
26. januar 2005 - 23:38 #3
Næh! Det er ikke korrekt :(

Søndag er godt nok den første dag, men den har værdien 1.
Avatar billede softspot Forsker
26. januar 2005 - 23:41 #4
Hvis du specificerer en anden parameter i weekday som antager værdien 2, vil dine uger starte fra mandag. Jeg tror i bund og grund det er der problemet ligger...
Avatar billede babz Nybegynder
27. januar 2005 - 00:17 #5
Godt så...det er ikke en off by one.
Der er noget galt med den måde GetWeekdayMonthStartsOn kører.
Den returnerer kun kald fra Weekday(CDate(blabla)) men det den returnerer er forkert...eller det svarer ihvertfald til det der bliver vist i kalenderen.

For februar siger iDow 1 hvilket jo er søndag...men det burde være 3 der er tirsdag.
Jeg stoppede en Response.Write ind på Idow... og det er ganske vidst forkert.

Hvad det er der lige sker ved jeg ikke, men kig på det!!
Avatar billede fennec Nybegynder
27. januar 2005 - 08:35 #6
Som softspot også nævner, skal du sikkert have en parameter på din WeekDay() funktion. Ændre:
GetWeekdayMonthStartsOn = WeekDay(CDate(iMonth & "/1/" & iYear))

til:
GetWeekdayMonthStartsOn = WeekDay(CDate(iMonth & "/1/" & iYear),vbMonday)

ellers starter uge om søndagen. Se også:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfctWeekday.asp
Avatar billede jonmh Nybegynder
27. januar 2005 - 09:22 #7
burde måske lige tilføje at jeg ikke selv har lavet scriptet da jeg ikke selv ka programmmere asp på et plan der er højere end det lige rækker til jeg ka sætte scriptet ind og så lige rette de allerstørste fejl.

fennec, når jeg ændre det rykker den ugedag månederne starter på bare en dag tilbage dvs at den 1. januar nu er en fredag
Avatar billede fennec Nybegynder
27. januar 2005 - 14:25 #8
Jeg må indrømme at jeg ikke helt kan gennemskue hvordan det script fungere.
Avatar billede jonmh Nybegynder
27. januar 2005 - 14:44 #9
hmm ok, er der nogle der kan anbefale en asp kalender, gerne forholdsvis simpel
Avatar billede jonmh Nybegynder
27. januar 2005 - 18:45 #10
Har selv løst problemet ved at hente et nyt script. Ellers mange tak for forsøget:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester