Avatar billede sorenmt84 Juniormester
07. december 2007 - 15:40 Der er 6 kommentarer og
1 løsning

Er dato inden for givet område?

Har 2 datoer

dato_start og dato_slut
Som fx kan være:
dato_start = "2007-12-01"
dato_slut = "2007-12-31"

Jeg har så ligeledes 2 datoer fra en db
dato_fra og dato_til

Jeg skal bruge et en lille if sætning der kan kontrollere om mine datoer fra databsen er inden for mit dato interval, så der fx står "OK" hvis datoen fra db er inden for området, eller "Fejl" hvis det er uden for

Det er nok at bare en af datoerne rammer inden for... perioden må fx godt starte den 28-11-2007, bare den så slutter den 01-12-2007 eller senere. Tilsvarende må den også godt starte den 24-12-2007 og slutte den 03-01-2008
Avatar billede soerenlyn Nybegynder
07. december 2007 - 19:35 #1
If dato_fra >= dato_start And dato_fra <= dato_slut Then
  Så er dato_fra i intervallet.
Elseif dato_til >= dato_start And dato_til <= dato_slut Then
  Så er dato_til i intervallet.
End If

.. Du kan også slå det sammen, hvis der bare sker det samme alligevel

If (dato_fra >= dato_start And dato_fra <= dato_slut) Or (dato_til >= dato_start And dato_til <= dato_slut) Then
  Response.Write "OK"
End If
Avatar billede sorenmt84 Juniormester
07. december 2007 - 20:38 #2
hey soerenlyn

Jeg havde faktisk fået skrevet noget sludder...
Det jeg har er at jeg har dato_start og dato_slut
Jeg kører så en lykke der starter ved dato_start og går en dag frem ad gangen til og med dato_slut

Det jeg engentlig skal bruge er så noget der kan holde mine dater fra min db op i mod det (dato_fra og dato_til)

hvis min periode er 01/12 til 24/12 får jeg altså en lykke der hedder
1/12
2/12
3/12
osv.
hvis min post i dben så er den 2/12 til den 4/12
skal det give følgende i min if-sætning
1/12
nej
2/12
ja
3/12
ja
4/12
ja
5/12
nej

osv osv.

Beklager fejlen, håber du vil hjælpe, ellers laver jeg et nyt
Avatar billede soerenlyn Nybegynder
07. december 2007 - 21:15 #3
Okay, så prøver jeg at se om jeg forstår det rigtigt nu :)

Set rs = Conn.Execute("SELECT [dato_fra],[dato_til] FROM [table] WHERE ([dato_fra] BETWEEN "&dato_start&" And "&dato_slut&") And ([dato_til] BETWEEN "&dato_start&" And "&dato_slut&")")
Do While Not rs.EOF
  Response.Write "Disse elementer burde så være de rigtige måske? :P"
Loop
Avatar billede soerenlyn Nybegynder
07. december 2007 - 21:17 #4
Eller måske ikke helt .. disse finder alle de intervaller i intervallet mellem stat og slut ... Så hvis du vil have præcis hvilke dato dette er kan du sætte en løkke ind:

Do While Not rs.EOF
  For i = rs("dato_fra") to rs("dato_til")
      Response.Write "Her kommer så de i'er (datoer) som findes.."
  Next
Loop
Avatar billede jansangill Nybegynder
07. december 2007 - 21:19 #5
for i=dato_start to dato_slut
  response.write i 
  post_i_db=rs("dato")
    if post_i_db=i
      response.write "ok"
    else
      response.write "nej"
    end if   
next


Aner ikke om det er noget i den stil du leder efter, eller om det er volapyk jeg skriver. Men det du skal er vel bare at sammenligne det du enten løkker ud, eller looper ud med værdien i db.
Avatar billede sorenmt84 Juniormester
07. december 2007 - 21:48 #6
nej I misforstår mig hvist

Jeg har styr på mit udtræk fra db'en!

Det jeg nu skal have gjort er at jeg skal have koblet en if-sætning på mit udtræk, så jeg kan få en givet tekst alt efter hvordan udtrækket passer i min formel!

For at beskrive det kort er det til en kalender.
Ned af har jeg en række opgaver (Y) og henad har jeg en måned, delt op på dage (X)

Fx:
Opgave/Dag    1      2    3    4
Opg1          x      x
Opg2                      x
Opg3          x      x    x    x

Mit db udtræk henter alle de opgaver der ligger inden for måden, altså hvor dato_fra starter i månden, eller hvor dato_fra starter tidligere, men dato_til så slutter i månden, eller begge er inden for.
De bliver listet ned af Y.
Jeg har så et loop der laver X-akslen, med en kolonne for hver dag i måden,
det jeg så skal bruge er at jeg skal have sat et "X" eller noget andet i de kolonner, ud for den enkelte opgave, hvor den er aktuel

For at gøre en lang historie kort, så har jeg fx et interval der hedder 2007-12-01 (dato_start) til 2007-12-31 (dato_fra)

Det jeg så skal have er en If-sætning der løber den enkelte opgaves tidsrum igennem (dato_fra og dato_til) igennem - If sætningen vil blive kørt for hver enkelt opgave, en gang for hver dag i perioden
og det jeg så skal opnå er at jeg for opg1 for markering den 1. og den 2. men fra den 3. - 31. skal der ikke markes noget

Jeg har lavet et simpelt loop

nr = 1
Do while nr <= day(dato_slut)
if nr <= 9 then
nr = "0" & nr
end if

nr = nr+1
loop
den laver de enkelte dage i løkken

nr bliver brug til at lave en dato-string således: year(dato_start) & "-" & month(dato_start) & "-" & nr

så jeg altså får listet som følger:

2007-12-01
2007-12-02
2007-12-03
osv.

i mellem min do while og loop skal jeg så have lagt if-sætningen ind der tager den enkelte dag (fx 2007-12-01) og holder den op i mod dato_fra og dato_til i db'en og ser om den aktuelle dag ligger inden for de to datoer

Håber I forstår det :-)
Avatar billede sorenmt84 Juniormester
08. oktober 2010 - 18:49 #7
lukker
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