Avatar billede kraghjensen Nybegynder
03. marts 2002 - 14:05 Der er 21 kommentarer og
1 løsning

Kontrol af dato og klokkeslæt

Jeg har i spørgsmål http://www.eksperten.dk/spm/81321 tidligere givet 100 point til webster for spørgsmålet. Men det viser sig at der er et hul i kontrollen af dato og klokkeslættet.

I dette tilfælde vil resultater blive ledig men skulle gerne blive optaget. Hvorfor ??

Alle andre tilfælde virke kode.

Private Sub Command1_Click()


    start_dato = "25-02-02"
    slut_dato = "26-02-02"

    Ny_Start_Dato = "26-02-02"
    Ny_Slut_Dato = "26-02-02"
   

    start_kl = "15:00"
    slut_kl = "23:00"
   
    Ny_Start_kl = "08:00"
    Ny_Slut_kl = "09:00"
   
    If DateDiff("d", Ny_Slut_Dato, start_dato) > 0 Then
        'Ny dato slutter før de andre starter (ændrer til >= for at få overlap)
        overlap_dato = False
    Else
        If DateDiff("d", slut_dato, Ny_Start_Dato) > 0 Then
            'Ny dato starter efter de andre slutter
            overlap_dato = False
        Else
            'En af de nye datoer overlapper eller starter inden i perioden defineret af de andre variabler. Ændrer > til >= for at overlappe.
            overlap_dato = True
        End If
    End If
    If overlap_dato = False Then

    Else
   
   
    'Datoen er optaget, derfor kontrol på klokken
   
   
   
   

    If DateDiff("h", Ny_Slut_kl, start_kl) > 0 Then
        'Ny dato slutter før de andre starter (ændrer til >= for at få overlap)
        overlap_kl = False
    Else
        If DateDiff("h", slut_kl, Ny_Start_kl) > 0 Then
            'Ny dato starter efter de andre slutter
            overlap_kl = False
        Else
            'En af de nye datoer overlapper eller starter inden i perioden defineret af de andre variabler. Ændrer > til >= for at overlappe.
            overlap_kl = True
           
        End If
    End If
 
 
End If




  If overlap_kl = True Then
 
 
  MsgBox "optaget"
 
  Else
 

 
MsgBox "ledig"
 
 
  End If
 
End Sub


Avatar billede terry Ekspert
03. marts 2002 - 14:50 #1
Function DateOverlap() As Boolean

    Start_Dato = "25-02-02"
    Slut_Dato = "26-02-02"

    Ny_Start_Dato = "26-02-02"
    Ny_Slut_Dato = "26-02-02"
   

    Start_Kl = "15:00"
    Slut_Kl = "23:00"
   
    Ny_Start_Kl = "08:00"
    Ny_Slut_Kl = "09:00"
   
    DateOverlap = False
   
    If (CDate(Ny_Start_Dato & " " & Ny_Start_Kl) > CDate(Start_Dato & " " & Start_Kl) _
    And CDate(Ny_Start_Dato & " " & Ny_Start_Kl) < CDate(Slut_Dato & " " & Slut_Kl)) _
    Or (CDate(Ny_Slut_Dato & " " & Ny_Slut_Kl) > CDate(Start_Dato & " " & Start_Kl) _
    And CDate(Ny_Slut_Dato & " " & Ny_Slut_Kl) < CDate(Slut_Dato & " " & Slut_Kl)) Then
   
        DateOverlap = True
    End If

End function
Avatar billede terry Ekspert
03. marts 2002 - 14:54 #2
I cant see where all your variables are declared but IF they were global variables then you could call this function from the On Click event

Or you can just replace the appropriate lines.

As you can see I test if the Ny_Start (date+time) is within the old period  OR the NY_Slut (date-time) is within the old period in one go.
Avatar billede terry Ekspert
03. marts 2002 - 18:44 #3
kraghjensen>hvordan går det?
Avatar billede kraghjensen Nybegynder
03. marts 2002 - 21:47 #4
Det går ikke.
Jeg har prøvet dit svar, men hvis jeg har et lokale der er reserveret i perioden:
10-03-02 kl 07:00 til 10-03-02 kl 10:00
vil funktionen ikke afvise denne reservation:

09-03-02 kl 07:00 til 11-03-02 kl 10:00 eller

10-03-02 kl 06:00 til 11-03-02 kl 06:30 eller ...
Avatar billede nolle_k Nybegynder
04. marts 2002 - 09:50 #5
Du skal bare teste alle muligheder!!

Det vil sige

if (Start < NyStart And Slut > NyStart Or
    Start > NyStart and Slut < NySlut  Or
    Start < NySlut And Slut > NySlut  Or
    Start < NySTart And Slut > Nyslut) then
  //Overlap i tid er forekommet!
end if
Avatar billede terry Ekspert
04. marts 2002 - 10:07 #6
I sent this for over 1 hour ago! Where did it end?

Try this!

If ((CDate(Ny_Start_Dato & " " & Ny_Start_Kl) > CDate(Start_Dato & " " & Start_Kl) _
    And CDate(Ny_Start_Dato & " " & Ny_Start_Kl) < CDate(Slut_Dato & " " & Slut_Kl)) _
    Or (CDate(Ny_Slut_Dato & " " & Ny_Slut_Kl) > CDate(Start_Dato & " " & Start_Kl) _
    And CDate(Ny_Slut_Dato & " " & Ny_Slut_Kl) < CDate(Slut_Dato & " " & Slut_Kl)) _
    Or (CDate(Ny_Start_Dato & " " & Ny_Start_Kl) < CDate(Start_Dato & " " & Start_Kl) _
    And CDate(Ny_Slut_Dato & " " & Ny_Slut_Kl) > CDate(Slut_Dato & " " & Slut_Kl))) Then
Avatar billede terry Ekspert
04. marts 2002 - 17:12 #7
kraghjensen>does it work now?
Avatar billede terry Ekspert
04. marts 2002 - 17:13 #8
but it would be easier if your data and time was one field!
Avatar billede kraghjensen Nybegynder
04. marts 2002 - 22:28 #9
Det virker stadig ikke. hvis et lokale er booket i et tidsrum kan man booket samme lokale i samme tidsrum.
Det man skulle have dato og klokkeslæt i samme felt, hvordan vil det se ud - hvis det er nemmere ?
Avatar billede kraghjensen Nybegynder
04. marts 2002 - 22:29 #10
Undskyld, der skal stå:
"Hvis" istedet for "Det" i 3 linie.
Avatar billede terry Ekspert
05. marts 2002 - 15:13 #11
kraghjensen>>I havent forgotten you, just VERY busy. Will get back to you as soon as possible with a working (thought they did) solution.

If you use a combined dat+time then I dont have to use CDate(Ny_Start_Dato & " " & Ny_Start_Kl)
I can manage with CDate(Ny_Start_DateTime)

mvh
Terry
Avatar billede terry Ekspert
05. marts 2002 - 20:08 #12
If ((CDate(Ny_Start_Dato & " " & Ny_Start_Kl) >= CDate(Start_Dato & " " & Start_Kl) _
    And CDate(Ny_Start_Dato & " " & Ny_Start_Kl) <= CDate(Slut_Dato & " " & Slut_Kl)) _
    Or (CDate(Ny_Slut_Dato & " " & Ny_Slut_Kl) >= CDate(Start_Dato & " " & Start_Kl) _
    And CDate(Ny_Slut_Dato & " " & Ny_Slut_Kl) <= CDate(Slut_Dato & " " & Slut_Kl)) _
    Or (CDate(Ny_Start_Dato & " " & Ny_Start_Kl) < CDate(Start_Dato & " " & Start_Kl) _
    And CDate(Ny_Slut_Dato & " " & Ny_Slut_Kl) > CDate(Slut_Dato & " " & Slut_Kl))) Then
   
        DateOverlap = True
    End If
Avatar billede nolle_k Nybegynder
06. marts 2002 - 09:41 #13
Prøv at paste koden og giv os de tidspunkter, der giver problemer???
Avatar billede terry Ekspert
06. marts 2002 - 11:13 #14
I think it works 99.? % OK now, ther eis just one little thing, but lets see if kraghjensen can see the problem (to test), befor eI say anything more :o)
Avatar billede nolle_k Nybegynder
06. marts 2002 - 11:17 #15
Hvad nu hvis Ny_Start = Start Og Ny_Slut = Slut??

Så går det galt!!
Avatar billede terry Ekspert
06. marts 2002 - 11:32 #16
works here!
Avatar billede nolle_k Nybegynder
06. marts 2002 - 11:44 #17
Ja ok!! Det er sandt!
Avatar billede kraghjensen Nybegynder
07. marts 2002 - 21:26 #18
Jeg kan ikke finde nogle "huller" mere. Terry, du siger om jeg kan se problemet, hvor er det ?
Avatar billede terry Ekspert
07. marts 2002 - 21:38 #19
hi>
If there is a "lokale" book from

10-03-2002 07:00 to 10-03-2002 08:00 then I WOULD allow an new booking 10-03-2002 08:00 to 10-03-2002 10:00 but my example doesnt!

<= should be <

where new start is <= end
Avatar billede terry Ekspert
09. marts 2002 - 10:37 #20
hi kraghjensen>are you happy with the solution?
Avatar billede kraghjensen Nybegynder
09. marts 2002 - 12:50 #21
Ja, og det eksempel du har der ikke virker kan jeg sagtens leve med.

MANGE tak for hjælpen
Avatar billede terry Ekspert
09. marts 2002 - 13:21 #22
OK, nad thanks :o)
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