Avatar billede donjohn Nybegynder
05. september 2000 - 17:10 Der er 10 kommentarer og
3 løsninger

Antal dage i måned?

Ok, jeg troede at der fandtes en funktion i VBscript der kunne finde antal dage i en måned. Men nej!

Hvem kan lave sådan en funktion?

Dvs intDayInMonth(12) ville retunere fx 31.
Funktionen skal tage højde for årstal, skudår osv.

På forhånd tak!
Don John
Avatar billede carpediem Nybegynder
05. september 2000 - 17:31 #1
strMonth = måneden
strYear = årstallet
strDate = \"31\" & strMonth & strYear
Do until i=1
If IsDate(strDate) = \"True\" Then
  Response.Write DatePart(\"d\", strDate, 0, 0)
  i=1
Else
  strDate = strDate-1
  i=0
End If
loop
%>

Jeg ved ikke om det virker, men du kan jo prøve.
Avatar billede stoffer Nybegynder
05. september 2000 - 18:18 #2
jeg har flikket denne sammen til dig. Kan godt være carpediem\'s er fiksere...men kan umiddelbart ikke få hans løsning til at virke...

<%

Function MonthLength(monthNumber)

    monthNow = monthNumber

    if monthnumber < 10 then
    monthnumber = \"0\" & monthnumber
    end if

    \'## RIGTIGT DATO FORMAT    (mm/dd/yy)
    startDate = cdate(monthnumber & \"/01/\" & year(now))
       
    \'## HVIS DECEMBER
    if monthNumber = 12 then   
       
        monthNext = 1
       
        else
   
        monthNext = monthNow + 1
       
    end if
   
    \'## SÆT TÆLLER
    daycount = 1
   
    for intPos = 1 to 55
   
        startDate = DateAdd(\"d\",1,startDate)
        monthNow = month(startDate)
       
        \'## HVIS NÆSTE MÅNED
        if monthNow = monthNext then
       
            exit for
           
        end if
   
        daycount = daycount + 1
    next
   
    MonthLength = daycount

end function


response.write MonthLength(10)

%>
Avatar billede stoffer Nybegynder
05. september 2000 - 18:25 #3
hejsa jeg så lige et major fejl. Da den mindste måned aldrig kan være på under 28 dage kan man jo ligesågodt formindske loopsne. Hastigheden er ca. 10x hurtigere på denne vil jeg tro. Kan max loope 3 gange. Så her er der ingen perfomance fælder :)


<%

Function MonthLength(monthNumber)

    monthNow = monthNumber

    if monthnumber < 10 then
    monthnumber = \"0\" & monthnumber
    end if

    \'## RIGTIGT DATO FORMAT    (mm/dd/yy)
    startDate = cdate(monthnumber & \"/28/\" & year(now))
       
    \'## HVIS DECEMBER
    if monthNumber = 12 then   
       
        monthNext = 1
       
        else
   
        monthNext = monthNow + 1
       
    end if
   
    \'## SÆT TÆLLER
    daycount = 28
   
    for intPos = 1 to 3
   
        startDate = DateAdd(\"d\",1,startDate)
        monthNow = month(startDate)
       
        \'## HVIS NÆSTE MÅNED
        if monthNow = monthNext then
       
            exit for
           
        end if
   
        daycount = daycount + 1
    next
   
    MonthLength = daycount

end function


response.write MonthLength(1)



%>
Avatar billede stoffer Nybegynder
05. september 2000 - 18:27 #4
den aktuelle måneds længde finder du self sådan her:

response.write MonthLength(month(now))
Avatar billede tandpine Nybegynder
05. september 2000 - 20:36 #5
Function GetLastDay(intMonthNum, intYearNum)
  dim dNextStart
       
  if CInt(intMonthNum)=12 then
    dNextStart= CDate(\"1/1/\" & intYearNum+1)
  else
    if month(\"1/2/2000\")=1 then
      dNextStart= CDate(intMonthNum+1&\"/1/\"&intYearNum)
    else
      dNextStart= CDate(\"1/\"&intMonthNum+1&\"/\"&intYearNum)
    end if
  end if
  GetLastDay= Day(dNextStart-1)
end function
Avatar billede tandpine Nybegynder
05. september 2000 - 20:37 #6
^^^^
Dette skulle kunne klare det.. jeg bruger den selv på min side :)
Avatar billede long_island Nybegynder
06. september 2000 - 08:40 #7
Function DaysInMonth(Month, Year)
If Month<1 or Month>12 then DaysInMonth=0
If Month=1 then DaysInMonth=31
If Month=3 then DaysInMonth=31
If Month=5 then DaysInMonth=31
If Month=7 then DaysInMonth=31
If Month=8 then DaysInMonth=31
If Month=10 then DaysInMonth=31
If Month=12 then DaysInMonth=31
If Month=4 then DaysInMonth=30
If Month=6 then DaysInMonth=30
If Month=9 then DaysInMonth=30
If Month=11 then DaysInMonth=30
If Month=2 then
    If Year/4=int(Year/4) then
        If Year/100=int(Year/100) then
            If Year/400=int(Year/400) then
                DaysInMonth=29
            else
                DaysInMonth=28
            End If
        Else
            DaysInMonth=29
        End If
    Else
        DaysInMonth=28
    End If
End If



Starten er simpel nok, men Skudsårs-handleren kan godt være uoverskuelig, men den skulle virke....



End Function
Avatar billede donjohn Nybegynder
06. september 2000 - 10:26 #8
Tandpine: Din funktion ser ret lækker ud. Tager den hensyn til skudår?
Avatar billede stoffer Nybegynder
06. september 2000 - 11:19 #9
Rimelig luksus at få så mange svar ;)

Du kan jo selv teste hvilke der tager højde for skudår.

i år 2000 har februar som sagt 29 dage.

Jeg ved min funktion virker. Jeg tror ikke der er nogen store performance forskel på nogen af løsninger. Men det er meget sjovt at se vores forskellige indgangsvinkler...
Avatar billede stoffer Nybegynder
06. september 2000 - 11:28 #10
tandpines og long_islands virker også fint....
Avatar billede donjohn Nybegynder
06. september 2000 - 16:23 #11
Ja, du har ret Stoffer - det er rimmelig luksus at få så mange svar - og I er sgu\' nogle flinke gutter!

Så jeg kan se det så virker stoffers,tandpines og long_islands til UG, så derfor deler jeg pointene mellem jer.

Tak for hjælpen!
Don John
Avatar billede tandpine Nybegynder
06. september 2000 - 20:53 #12
donjohn. jeg takker :)
Avatar billede jimmidreng Nybegynder
08. oktober 2002 - 18:05 #13
Bare som kommentar, denne er da klart den nemmeste metode:

Function LastDay(MyMonth, MyYear)
    Select Case MyMonth
        Case 1, 3, 5, 7, 8, 10, 12
            LastDay = 31
           
        Case 4, 6, 9, 11
            LastDay = 30
           
        Case 2
            If IsDate(MyYear & "-" & MyMonth & "-" & "29") Then LastDay = 29 Else LastDay = 28
           
        Case Else
            LastDay = 0
   
    End Select
End Function
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