startDato = CDate("07/15/2006") ' Eller "15/07/2006" afhængigt af om sitet køre med Dansk locale
slutDato = startDato
' Tæl 1 dag op ad gangen til vi når til en ny måned. Do While Month(slutDato) = Month(startDato) slutDato = DateAdd("d", 1, slutDato) Loop
' Tæl 1 dag op ad gangen til vi når til en onsdag. Do While Weekday(slutDato, vbMonday) <> 3 slutDato = DateAdd("d", 1, slutDato) Loop
idag = Date()
If (idag <= startDato) The Response.Write "Vi har endnu ikke passeret startdatoen." Else If (slutDato <= idag) Response.Write "Vi har passeret slutdatoen." Else Response.Write "Vi er imellem start- og slutdatoen." End If
jeg kan ikke lige gennemskue om det med at tælle op, løser mit problem, men her en slags "algoritme" beskrivelse:
hvis dagnr af Now() er større end 15, så har datoen passeret den 15. i måneden, men endnu ikke begyndt på en ny - det var første del (og dermed min første handlemulighed)
ellers (altså, nu er en ny måned startet og her skal jeg finde første onsdag)
hvis ugedagen endnu ikke er lig med "onsdag" og dagnr af Now() er mindre end eller lig med 7, så er første onsdag i måneden endnu ikke nået
disse 2 hvis-sætninger skal være opfyldt samtidigt for at jeg kan udføre handling 1 ellers udføres handling 2
d.v.s handling 2 svarer til at Now() ligger mellem første onsdag i måneden og den 15. i måneden.
håber det giver mening og kan forstås
altsammen skal som køreklar kode indlægges i en eksisterende asp-siden imellem <% og %>
Nu har jeg lavet et stykke kode til dig, så det synes jeg du skal afprøve først :^)
Men bortset fra det så skal du jo tænke på at når du skriver "... nu er en ny måned startet ..." så er det vigtigt at vide "i forhold til hvornår?". Du kan ikke bare kigge på Now() og så afgøre at der nu er startet en ny måned. Now() giver jo bare dagen i dag (eller rettere sagt tidspunktet lige nu). Og hvornår er "lige nu" så inde i en ny måned?
ok - jeg kan godt se, hvad du mener, det fortæller mig blot, at jeg har glemt at oplyse, at den side, hvori jeg har brug for koden til dato-intervallet, aktivires af en bruger/klient og når det sker, får jeg jo en frisk værdi fra Now(), som så via dato-interval-koden skal afgøre om handling 1 eller handling 2 aktuelt skal udføres !
Koden i 23/07-2006 14:07:03 definere en startdato og en slutdato - d. 15/7 og den første onsdag i den efterfølgende måned.
Jeg bruger derefter Date(), i stedet for Now(), til at afgøre "dagen idag". Alt efter om idag ligger før eller efter start- og slutdatoen, eller imellem dem, kan du jo gøre de forskellige ting der skal gøres. Det er det jeg demonstrete i If/If Else/Else blokken i bunden.
jo tak, men, som jeg forstår din oprindelige kode, og bemærk, at jeg er ikke en ørn til noget sådan, men så ser det ud til, at jeg skal rette "dato-konstanten" startDato, hver måned ! og så er jeg jo lige vidt, jeg mener, så har jeg jo ikke opnået nogen form for automatik ! ? og så er der lige det, hvad det hedder i asp (altså dagnr taget af Date() )
de eneste 2 konstanter jeg kan se for mig, er, et dagnr, nemlig 15 og et ugedagnavn (eller tilsvarende nummer i en uge), så skulle resten virker "fuldautomatisk" - det var altså min idé - så hvis jeg har misforstået noget, vil jeg gerne vide hvor ?
Hvis startDatoen ikke ligger fast på en eller anden måde er det ikke klart hvornår at det er den første onsdag i den efterfølgende måned.
Jeg kan sagtens ændre koden til at sætte startDato til altid at være d. 15 i den måned man er i når man besøger sitet, men så kommer man jo aldrig forbi den første onsdag i næste måned - den vil jo flyttes sig til næste måned igen lige så snart man passere et månedskift.
Dagnummer får du ved funktionen Day(...).
Response.Write Day(Date())
Ugedagnavn findes ikke som funktion, men der er funktionen Weekday(..., vbMonday), som giver værdien 3 hvis dagen er en onsdag.
Response.Write Weekday(Date(), vbMonday)
Der er en liste over de dato-relatered funktioner her:
;Handlingsvalg udfra Deadline-kriterie - overskredet den 15. i måneden indtil og med 1. onsdag i ny måned ;------------------------------------------------------------------- if (AktuelDagnr >= DeadlineDagnr) Then Response.Write "Deadline er passeret." Else If (AktuelDagnr <= 7) and (AktuelDeadlineUgenr >= DeadlineUgedagnr) Then Response.Write "OK - Ny deadline er klar. D.v.s. du befinder dig nu efter 1. onsdag i måneden og inden den 15." Else Response.Write "Sorry - Deadline skal ligge før den 15. og efter 1. onsdag i måneden." End If ;-------------------------------------------------------------------
Tja, du kan i hvert fald ikke bruge ; til kommentarer :^)
Men jeg synes også at der er noget uldent ved det 2. led i:
Else If (AktuelDagnr <= 7) and (AktuelDeadlineUgenr >= DeadlineUgedagnr) Then
Husk på at en uge jo sagtens kan ligge temmeligt skævt i forhold til hvornår måneden starter. Ugens onsdag kan jo ligge i den foregående måned eller i den måned som vi pt. er i.
.oOo.
Under alle omstrændigheder ville jeg foretrække din kode på denne here form i stedet:
' Handlingsvalg udfra Deadline-kriterie - overskredet den 15. i måneden indtil og med 1. onsdag i ny måned
' ------------------------------------------------------------------- If (DeadlineDagnr <= AktuelDagnr) Then Response.Write "Deadline er passeret." Else If (AktuelDagnr <= 7) And (DeadlineUgedagnr <= AktuelDeadlineUgenr) Then Response.Write "OK - Ny deadline er klar. D.v.s. du befinder dig nu efter 1. onsdag i måneden og inden den 15." Else Response.Write "Sorry - Deadline skal ligge før den 15. og efter 1. onsdag i måneden." End If ' -------------------------------------------------------------------
.oOo.
Du kan også kigget på dette forslag:
' Find datoen idag. idag = Date()
' Find nummeret på den i måneden. dagNr = Day(idag)
' Find d. 15 i samme måned som idag dato15 = DateAdd("d", 15-dagNr, idag)
' Find d. 1 i samme måned som idag. dato01 = DateAdd("d", 1-dagNr, idag)
' Læg 1 dag til indtil vi når den 1. onsdag datoOnsdag = dato01 While Weekday(datoOnsdag, vbMonday) dato15 = DateAdd("d", 1, datoOnsdag) Loop
' Test på datoerne: If idag <= datoOnsdag Or dato15 <= idak Then Response.Write "Sorry - Deadline skal ligge før den 15. og efter 1. onsdag i måneden." Else Response.Write "OK - Ny deadline er klar. D.v.s. du befinder dig nu efter 1. onsdag i måneden og inden den 15." End If
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.