Avatar billede rille101 Nybegynder
23. august 2006 - 15:38 Der er 16 kommentarer og
3 løsninger

Vis næste åbningstid (forskel på ulige og lige uger)

Den lokale genbrugsplads har åben
torsdage i ulige uger kl. 11.00 - 17.00
lørdage i lige uger kl. 9.00 - 12:00

Jeg mangler et script, der fortæller mig, hvornår genbrugspladsen har åben, næste gang.

Dvs. hvis vi har passeret 17.00 på en torsdag i en ulige uge, så skal scriptet vise at næste åbningstid er lørdag d. dd/mm kl. 9.00 - 12.00
Avatar billede flashit Nybegynder
23. august 2006 - 16:04 #1
Denne lille funktion finder ud af om der er en lige uge eller ikke.
Så skal den "bare" kigge på åbnings tiderne.

WeekNumber = DatePart("ww", Date, 2, vbFirstFourDays)

Response.Write(WeekNumber)

if WeekNumber mod(2) = 0 then
Response.Write("lige uge")
else
Response.Write("Ulige ugen")
end if
Avatar billede montago Praktikant
23. august 2006 - 16:07 #2
her er et delvist svar

<%
IF DatePart("y",Date) mod 2 = 0 then 'Lige uge
%>
VIS LIGE UGE
<% Else %>
VIS ULIGE UGE
<% End if %>
Avatar billede rille101 Nybegynder
23. august 2006 - 19:55 #3
Flashhit/montago > jeg bruger allerede en version der ligner din.
Problemet er, at den viser ikke næste åbningstid, men kun en forskellig besked på lige/ulige uge.

Dvs. at det eneste jeg kan skrive er f.eks.
I denne uge er der åbent torsdag fra 11.00 til 17.00

Fredag i en ulige uge skriver den således stadigvæk at der er åbent om torsdagen.
Det har forvirret mange af mine brugere, derfor søger jeg en lidt udvidet udgave...

Torsdage efter kl. 17:00 i en ulige uge vil jeg have den til at skrive:
næste åbningstid er: lørdag d. dd/mm kl. 9:00 til 12:00
Avatar billede montago Praktikant
23. august 2006 - 20:06 #4
<%
IF DatePart("y",Date) mod 2 = 0 then
    if Weekday(date) = 5 AND time > "17:00:00" then
        <Torsdag efter kl 17>
    else
        <alle dage i lige uger>
    end if
Else
    <alle dage i ulige uger>
End if
%>
Avatar billede rille101 Nybegynder
23. august 2006 - 21:08 #5
OK.
Jeg har prøvet at opstille denne, ud fra dit forslag:

IF DatePart("y",Date) mod 2 = 0 then 'Lige uge
    if Weekday(date) >= 6 AND time > "12:00:00" then
        response.write("Næste gang Genbrugspladsen er åben er torsdag (vi har nu lige uge)")
    else
        response.write("Næste gang Genbrugspladsen er åben er lørdag (vi har nu lige uge)")
    end if
Else
    if Weekday(date) >= 4 AND time > "17:00:00" then
        response.write("Næste gang genbrugspladsen er åben er lørdag (vi har nu ulige uge)" )
    else
        response.write("Næste gang Genbrugspladsen er åben er torsdag (vi har nu ulige uge)")
    end if
End if


jeg har dog et par spørgsmål...
Lige nu er vi i en lige uge, og da vi har onsdag, burde resultatet så ikke være den første response?
Det er den nemlig ikke. Jeg får resultatet: den tredje response. Hvordan kan det være?

Du skriver weekday(date) = 5. Er 5 ikke = fredag?
Avatar billede montago Praktikant
23. august 2006 - 21:14 #6
ehm - gættede på at det var 5...

default er Søndag = 1, hvilket gør Torsdag til 5... ikke sandt ?

din nr 3 = onsdag
Avatar billede rille101 Nybegynder
23. august 2006 - 21:27 #7
Ja det har du vist i grunden ret i. har nu rettet mine værdier til 7 og 5.

Jeg har også fået den til at vise den rigtige response.write med denne linie.
If datepart("ww", date(), 3,3)mod 2 = 0 Then 'Lige uge

Nu mangler vi bare at få den til at vise datoen for den næstkommende torsdag/lørdag, så skulle den vist være der.
har du en løsning på det også?
Er en klovn til at arbejde med datoer i asp :)
Avatar billede montago Praktikant
23. august 2006 - 21:49 #8
dvs... der er kun åben torsdag ELLER lørdag ? efter de respektive datoer ?

du har allerede løsningen :)

du skal bare indsætte næste åbning('er) i de respektive responser...

vil du også have datoerne ??
Avatar billede rille101 Nybegynder
24. august 2006 - 08:27 #9
goodmornings!
Jeps, hvis der er åben om torsdagen (ulige uge)
så er der først åben igen om 9 dage (lørdag i den lige uge). velkommen på landet:)
Ja jeg vil gerne have datoerne udskrevet, altså:
Lørdag kl. 12:00 i lige uge skal den skrive: åben næste gang torsdag d. dd/mm
Torsdag kl. 17:00 i ulie uge skal den skrive: åben næste gang lørdag d. dd/mm
(bemærk at her er det altså ikke den næstkommende lørdag, men den lørdag der kommer om 9 dage fra om torsdagen.)

Forvirrende??? :)
Avatar billede montago Praktikant
24. august 2006 - 11:32 #10
Følgende er nemt at rette til...

<%
server.ScriptTimeout = 5

Function isOpen(dato)
    isOpen = false
    IF DatePart("ww",dato) mod 2 = 0 then 'Lige uge
        if Weekday(dato) = 5 Then
            isOpen = true
        End if
    Else
        if Weekday(dato) = 7 Then
            isOpen = true
        End if
    End if
END Function

Function findNext(dato)
    B = 1
    do until isOpen(dato + B )
        B=B+1
    loop
    findNext = (dato + B)
END Function

SUB whoami(dato)
    IF DatePart("ww",dato) mod 2 = 0 then 'Lige uge
        Response.Write "<td>(" & WeekDayName(datepart("w",dato)) & ")<td> Lige uge "
       
        if Weekday(dato) = 5 and Time > "11:00:00" and Time < "17:00:00" then
            Response.Write "<td> <b>ÅBEN "
        Else
            Response.Write "<td> Lukket "
            if Weekday(dato) >= 5 then
                Response.Write "<td> kom igen på Lørdag d. "
            else
                Response.Write "<td> kom igen på Torsdag d. "
            end if
        end if
    Else
        Response.Write "<td>(" & WeekDayName(datepart("w",dato)) & ")<td> U-Lige uge "
       
        if Weekday(dato) = 7 and Time > "09:00:00" and Time < "12:00:00" then
            Response.Write "<td> <b>ÅBEN "
        Else
            Response.Write "<td> Lukket "
            if Weekday(dato) >= 7 then
                Response.Write "<td> kom igen på Torsdag d. "
            else
                Response.Write "<td> kom igen på Lørdag d. "
            end if
        end if
    End if
    Response.Write "<td>" & findNext(date + A)
END SUB
Response.Write "<table>"
For A = 0 to 50
    Response.Write( "<tr><td>" & Date+A & " <td>" )
    call whoami(date+A)
    'Response.Write isOpen(date + A)
   
Next

%>
Avatar billede montago Praktikant
24. august 2006 - 11:33 #11
^-- output af ovenstående ser sådan her ud:

24-08-2006 (torsdag) Lige uge     ÅBEN     02-09-2006
25-08-2006 (fredag)    Lige uge     Lukket     kom igen på Lørdag d.     02-09-2006
26-08-2006 (lørdag)    Lige uge     Lukket     kom igen på Lørdag d.     02-09-2006
27-08-2006 (søndag)    U-Lige uge     Lukket     kom igen på Lørdag d.     02-09-2006
28-08-2006 (mandag)    U-Lige uge     Lukket     kom igen på Lørdag d.     02-09-2006
29-08-2006 (tirsdag)    U-Lige uge     Lukket     kom igen på Lørdag d.     02-09-2006
30-08-2006 (onsdag)    U-Lige uge     Lukket     kom igen på Lørdag d.     02-09-2006
31-08-2006 (torsdag)    U-Lige uge     Lukket     kom igen på Lørdag d.     02-09-2006
01-09-2006 (fredag)    U-Lige uge     Lukket     kom igen på Lørdag d.     02-09-2006
02-09-2006 (lørdag)    U-Lige uge     ÅBEN     07-09-2006
03-09-2006 (søndag)    Lige uge     Lukket     kom igen på Torsdag d.     07-09-2006
04-09-2006 (mandag)    Lige uge     Lukket     kom igen på Torsdag d.     07-09-2006
05-09-2006 (tirsdag)    Lige uge     Lukket     kom igen på Torsdag d.     07-09-2006
06-09-2006 (onsdag)    Lige uge     Lukket     kom igen på Torsdag d.     07-09-2006
07-09-2006 (torsdag)    Lige uge     ÅBEN     16-09-2006
Avatar billede rille101 Nybegynder
24. august 2006 - 12:58 #12
jeg har prøvet at rette det lidt til,så den nu ser ud som her.
Jeg kan dog kun få det til at virke delvist.
I dag (d. 24/8) skriver den at næste åbningstid er i dag. Det passer ikke, den skulle gerne skrive d. 26/8. Jeg kan som det nærmeste få den til at skrive torsdag d. 31/8.

Function isOpen(dato)
    isOpen = false
    If datepart("ww", date(), 3,3)mod 2 = 0 Then 'Lige uge
        if Weekday(dato) = 5 Then
            isOpen = true
        End if
    Else
        if Weekday(dato) = 7 Then
            isOpen = true
        End if
    End if
END Function

Function findNext(dato)
    B = 1
    do until isOpen(dato + B )
        B=B+1
    loop
    findNext = (dato + B)
END Function

SUB whoami(dato)
    If datepart("ww", date(), 3,3)mod 2 = 0 Then 'Lige uge
        if Weekday(date) >= 7 AND time > "12:00:00" then
            Response.Write "<BR>Næste gang genbrugspladsen er åben er 1: "& findNext(dato + B)
        Else
            Response.Write "<BR>Næste gang genbrugspladsen er åben er 2: " & (dato)

        end if
    Else
        if Weekday(date) >= 5 AND time > "17:00:00" then
            Response.Write "<BR>Næste gang genbrugspladsen er åben er 3: "& findNext(dato + B)
        Else
            Response.Write "<BR>Næste gang genbrugspladsen er åben er 4: " & (dato)
        end if
    End if
END SUB

For A = 0 to 0
    call whoami(date+A)   
Next
Avatar billede montago Praktikant
24. august 2006 - 13:16 #13
god dammit...

dét whoami (Who am i) kald den noget andet ;) - gør er at finde ud af om NU = åben eller lukket

isOpen kan tjekke en dato for om der er åben eller lukket (uden at medregne tidspunk)

findNext finder den næste dag der er åbent - kald den med en dato
findNext(date + offset)


koden er nu rettet...

i stedet for at udskrive "ÅBEN" kan du skrive noget mere eller noget andet... dvs næste åbning...

SVÆRERE ER DET IKKE :D

<%
server.ScriptTimeout = 5

Function isOpen(dato)
    isOpen = false
    IF DatePart("ww",dato) mod 2 = 0 then 'Lige uge
        if Weekday(dato) = 5 Then
            isOpen = true
        End if
    Else
        if Weekday(dato) = 7 Then
            isOpen = true
        End if
    End if
END Function

Function findNext(dato)
    B = 1
    do until isOpen(dato + B )
        B=B+1
    loop
    findNext = (dato + B)
END Function

SUB whoami(dato)
    IF DatePart("ww",dato) mod 2 = 0 then 'Lige uge
        'Response.Write "<td>(" & WeekDayName(datepart("w",dato)) & ")<td> Lige uge "
       
        if Weekday(dato) = 5 and Time > "11:00:00" and Time < "17:00:00" then
            Response.Write "<td> <b>ÅBEN "
        Else
            Response.Write "<td> Lukket "
            if Weekday(dato) >= 5 then
                Response.Write "<td> kom igen på Lørdag d. "
            else
                Response.Write "<td> kom igen på Torsdag d. "
            end if
        end if
    Else
        'Response.Write "<td>(" & WeekDayName(datepart("w",dato)) & ")<td> U-Lige uge "
       
        if Weekday(dato) = 7 and Time > "09:00:00" and Time < "12:00:00" then
            Response.Write "<td> <b>ÅBEN "
        Else
            Response.Write "<td> Lukket "
            if Weekday(dato) >= 7 then
                Response.Write "<td> kom igen på Torsdag d. "
            else
                Response.Write "<td> kom igen på Lørdag d. "
            end if
        end if
    End if
    Response.Write "<td>" & findNext(date + A)
END SUB

Response.Write "<table>"

whoami(date)
%>
Avatar billede montago Praktikant
24. august 2006 - 13:21 #14
der burde måske rettes, sådan at hvis klokken = 10 på en torsdag, skrives at der åbnes i dag klokken 11...

det kræver bare et tjek mere, dét hvor der er Åbent...
Avatar billede montago Praktikant
24. august 2006 - 13:24 #15
fx :

        if Weekday(dato) = 7 and Time < "12:00:00" then
            if Time > "09:00:00" then
                Response.Write "<td> <b>ÅBEN "
            else
                Response.Write "<td> <b>vi åbner klokken 09:00 "
            end if
        Else
Avatar billede montago Praktikant
24. august 2006 - 13:27 #16
her er lidt smartere script :

<%
server.ScriptTimeout = 5

Function isOpen(dato)
    isOpen = false
    IF DatePart("ww",dato) mod 2 = 0 then 'Lige uge
        if Weekday(dato) = 5 Then
            isOpen = true
        End if
    Else
        if Weekday(dato) = 7 Then
            isOpen = true
        End if
    End if
END Function

Function findNext(dato)
    B = 1
    do until isOpen(dato + B )
        B=B+1
    loop
    findNext = (dato + B)
END Function

SUB whoami(dato)
    IF DatePart("ww",dato) mod 2 = 0 then 'Lige uge
        'Response.Write "<td>(" & WeekDayName(datepart("w",dato)) & ")<td> Lige uge "
       
        if Weekday(dato) = 5 and Time < "17:00:00" then
            if Time > "11:00:00" then
                Response.Write "<td> <b>ÅBEN "
            else
                Response.Write "<td> <b>vi åbner klokken 11:00 "
            end if
        Else
            Response.Write "<td> <b>Lukket</b> "
        end if
    Else
        'Response.Write "<td>(" & WeekDayName(datepart("w",dato)) & ")<td> U-Lige uge "
       
        if Weekday(dato) = 7 and Time < "12:00:00" then
            if Time > "09:00:00" then
                Response.Write "<td> <b>ÅBEN "
            else
                Response.Write "<td> <b>vi åbner klokken 09:00 "
            end if
        Else
            Response.Write "<td> <b>Lukket</b> "
        end if
    End if
    Response.Write "<td> næste Åbning: " & WeekdayName(Weekday(findNext(date + A))) & " den " & findNext(date + A)
END SUB

Response.Write "<table>"

whoami(date+1)
%>
Avatar billede montago Praktikant
24. august 2006 - 13:28 #17
du skal så i ovenstående. fjerne +1 i kaldet...
Avatar billede rille101 Nybegynder
24. august 2006 - 15:05 #18
Ja nu tror jeg nok den virker!
Vil lige teste den lidt frem og tilbage, men det ser ud som om alt er som det skal være.

Jeg melder lige tilbage først i næste uge, da jeg skal på weekendophold fra fredag, og får nok ikke så meget tid inden da...
Avatar billede rille101 Nybegynder
31. august 2006 - 11:05 #19
Det virker bare helt perfekt!
Mange tak for hjælpen!
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