[vb] betere manier om datum te zoeken

Pagina: 1
Acties:

  • Blizard
  • Registratie: September 2001
  • Niet online
Ik heb zonet een kleine functie geschreven om de dichtsbijzijnde juiste datum te zoeken. Klinkt misschien beetje verwarrend, maar ik wou iets maken dat bv de dichtsbijzijnde maandag zoekt, wanneer een gebruiker een datum ingeeft.
bv : zaterdag 20 april (ik wil dichtste maandag) > maandag 22 april.

Public Function ZoekJuisteDatum(dtAankomstDatum As Date, bytWeekDay As Byte)
Dim bytWeekDayInvoer As Byte
bytwdinvoer = Weekday(dtAankomstDatum)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Select Case bytWeekDay
Case 2
    Select Case bytwdinvoer
    Case 1
    dtAankomstDatum = dtAankomstDatum + 1
    Case 2
    dtAankomstDatum = dtAankomstDatum
    Case 3
    dtAankomstDatum = dtAankomstDatum - 1
    Case 4
    dtAankomstDatum = dtAankomstDatum - 2
    Case 5
    dtAankomstDatum = dtAankomstDatum - 3
    Case 6
    dtAankomstDatum = dtAankomstDatum + 3
    Case 7
    dtAankomstDatum = dtAankomstDatum + 2
    Debug.Print dtAankomstDatum
    End Select
Case 6

End Select
End Function

Dit werkt nu al voor maandag (weekday 2), maar als ik dit voor elke weekdag moet schrijven lijkt het mij dat er een kortere manier voor is ?! Iemand enig idee ?

Verwijderd

code:
1
2
3
4
5
6
7
8
Public Function ZoekJuisteDatum(ByVal dtIn As Date, byval weekday As VbDayOfWeek) As Date
  Dim dtResult As Date
  dtResult = dtIn
  While DatePart("w", dtResult) <> weekday
    dtResult = DateAdd("d", 1, dtResult)
  Wend
  ZoekJuisteDatum = dtResult
End Function

Zoiets?

  • Blizard
  • Registratie: September 2001
  • Niet online
Ziet er goed uit, maar als ik het ff test krijg ik hetvolgende :

zoekjuistedatum2(#8/12/2003#,2)
18/08/2003 [jouw manier]
11/08/2003 [mijn manier]

en 11 ligt dichter bij 12 dan dat 18 bij 12 ligt ?! Of doe ik iets fout

Verwijderd

Ik had alleen naar je voorbeeld gekeken, niet naar je warrige source dus ging er vanuit dat je de eerst volgende maandag in de toekomst zocht ;)
code:
1
2
3
4
5
6
7
8
Public Function ZoekJuisteDatum(ByVal dtIn As Date, weekday As VbDayOfWeek) As Date
  Dim dtResult As Date
  dtResult = DateAdd("d", dtIn, -3)
  While DatePart("w", dtResult) <> weekday
    dtResult = DateAdd("d", 1, dtResult)
  Wend
  ZoekJuisteDatum = dtResult
End Function

  • Blizard
  • Registratie: September 2001
  • Niet online
Thanks, :) het werkt en ik kan er deels aan uit, maar zou het mogelijk zijn bij de lijntjes ff snel te vertellen _wat_ ze juist doen en waarom (heb help gebruikt in vb, maar zie toch niet altijd waarom je dat nou allemaal doet). Alvast bedankt voor de functie

Verwijderd

Simpel:

De dichstbijzijnde dag kan nooit verder dan 3 dagen in het verleden liggen (want als je 4 dagen terug gaat in de tijd om op de juiste dag te komen, kan je er net zo goed 3 bij optellen en dat is dan weer dichterbij)

kortom we trekken 3 dagen af van de dag die jij als invoer geeft
code:
1
   dtResult = DateAdd("d", dtIn, -3)

[edit]
ik zie net 'n typo hier, dit moet natuurlijk zijn:
code:
1
   dtResult = DateAdd("d", -3,dtIn)

Vervolgens maken we een lusje die kijkt of die datum de dag is die jij zoekt, zoniet doen we er een dagje bij.
code:
1
2
3
  While DatePart("w", dtResult) <> weekday
    dtResult = DateAdd("d", 1, dtResult)
  Wend

En die datum geven we terug als result..
code:
1
 ZoekJuisteDatum = dtResult

  • Blizard
  • Registratie: September 2001
  • Niet online
Ok :)
Heel erg bedankt !
Pagina: 1