Avatar billede rookieboy Nybegynder
28. april 2008 - 11:01 Der er 14 kommentarer

Dato spørgsmål: Find dato i en range

Jeg skal i mit bookingsystem, lave en funktion, der tjekker om en bruger forsøger at oprette en booking i den periode jeg har ferielukket.

Jeg ønsker en funktion der tager imod argumenterne 'userRequestedDate', 'startFerie' og 'slutFerie'. Funktionen skal returnere end boolean.

Jeg kan ikke rigtig finde ud af, hvordan jeg skal undersøge, om en given dato ligger mellem 2 andre datoer.

Det er vel noget med at bruge dateDiff til at tælle dage med.. Men hvordan..?

Help me..
Avatar billede w13 Novice
28. april 2008 - 11:03 #1
Function ValidRequest(userRequestedDate,startFerie,slutFerie)
  If userRequestedDate>=startFerie And userRequestedDate<=slutFerie Then ValidRequest=False Ele ValidRequest=True
End Function

Burde vist gøre det.
Avatar billede w13 Novice
28. april 2008 - 11:03 #2
Hov, der sneg sig en typo ind:

Function ValidRequest(userRequestedDate,startFerie,slutFerie)
  If userRequestedDate>=startFerie And userRequestedDate<=slutFerie Then ValidRequest=False Else ValidRequest=True
End Function
Avatar billede rookieboy Nybegynder
28. april 2008 - 11:10 #3
Okay, har fundet en løsning:

function isRequestedDateVacationTime(RequestedDate, startDate, endDate)
    dim r, s, e, dateSpan, returnVal
    returnVal = false
    r = cdate(day(RequestedDate) & "-" & month(RequestedDate) & "-" & year(RequestedDate))
    s = cdate(startDate)
    e = cdate(endDate)
    dateSpan = DateDiff("d", s, e)
   
    for i = 0 to dateSpan
        if r = dateAdd("d",i,s) then
            returnVal = true
            exit for
        end if
    next
   
    isRequestedDateVacationTime = returnVal
end function
Avatar billede rookieboy Nybegynder
28. april 2008 - 11:11 #4
Men det er måske en bøvlet måde at lave det på, w13?
Avatar billede w13 Novice
28. april 2008 - 11:19 #5
Det vil jeg mene ja.

Men det kan godt være, min skulle være sådan her i stedet:

Function isRequestedDateVacationTime(RequestedDate,startDate,endDate)
  RequestedDate=CDate(RequestedDate)
  startDate=CDate(startDate)
  endDate=CDate(endDate)
  If RequestedDate>=startDate And RequestedDate<=endDate Then isRequestedDateVacationTime=False Else isRequestedDateVacationTime=True
End Function

Det skulle da meget gerne fungere.
Jeg kan ikke helt se logikken i din funktion, må jeg indrømme.

Du kan jo lige prøve, om min funktion virker, og ellers kan du bruge din egen, og oprette et svar og acceptere det, så du får pointene igen og spørgsmålet lukkes.
Avatar billede rookieboy Nybegynder
28. april 2008 - 11:23 #6
Altså, den der kan lave funktionen på færrest antal linier har vundet!
Jeg skulle bruge 15, du skulle bruge 7.

Så du vinder!
Avatar billede rookieboy Nybegynder
28. april 2008 - 11:23 #7
Altså, den der kan lave funktionen på færrest antal linier har vundet!
Jeg skulle bruge 15, du skulle bruge 7.

Så du vinder!
Avatar billede rookieboy Nybegynder
28. april 2008 - 11:23 #8
Men jeg beholder min egen, da den virker :-)
Avatar billede rookieboy Nybegynder
28. april 2008 - 11:24 #9
Jeg var bare ikke klar over, at man kunne bruge operatorerne < > = på datoer, på denne måde som du gør.
Avatar billede w13 Novice
28. april 2008 - 11:25 #10
Ok. Jamen så husk at acceptere mit svar her nederst på siden. =)

(Egentlig brugte jeg kun 6, men Eksperten delte bare den femte linje i 2. ;)
Avatar billede w13 Novice
28. april 2008 - 20:50 #11
? :)
Avatar billede solle Nybegynder
29. april 2008 - 10:47 #12
Bare for at komme med et andet eksempel....

Hvis du så gemmer alle dine "lukket"-datoer i en tabel, så kigger den igennem samtlige datoer, i stedet for kun en periode ad gangen.


function isRequestedDateVacationTime(RequestedDate)
    Set objDictionary = Server.CreateObject("Scripting.Dictionary")
    strSQL="SELECT * FROM [Tbl_lukketdatoer]"
    set rs = Conn.Execute(strSQL)
    while not rs.EOF
        subKeyName  = DateValue(CDate(rs("lukket_dato")))
        subKeyValue = "Lukket"
        objDictionary.Add subKeyName, subKeyValue
        rs.MoveNext
    wend
    if(objDictionary.Exists(DateValue(CDate(RequestedDate))))then
        isRequestedDateVacationTime = True 'Vi har lukket!
    else
        isRequestedDateVacationTime = False 'Vi har åbent!
    end if
    Set objDictionary = Nothing
end function
Avatar billede solle Nybegynder
29. april 2008 - 10:48 #13
her hvis du vil have lidt færrer linjer :P

function isRequestedDateVacationTime(RequestedDate)
    Set objDictionary = Server.CreateObject("Scripting.Dictionary")
    set rs = Conn.Execute("SELECT * FROM [Tbl_lukketdatoer]")
    while not rs.EOF
        objDictionary.Add DateValue(CDate(rs("lukket_dato"))), "Lukket"
        rs.MoveNext
    wend
    if(objDictionary.Exists(DateValue(CDate(RequestedDate))))then isRequestedDateVacationTime = True 'Vi har lukket! else isRequestedDateVacationTime = False 'Vi har åbent!
    Set objDictionary = Nothing
end function
Avatar billede bauerdata Nybegynder
29. april 2008 - 12:43 #14
#!/usr/bin/env python
def dato_mellem( dato, start, slut ):
    if start <= dato <= slut:
        return True
    return False
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