Avatar billede jekk Nybegynder
23. juli 2006 - 11:34 Der er 15 kommentarer og
1 løsning

Now() skal ligge indenfor en fast dato og en flydende - hvordan ?

jeg har brug for noget asp-kode, der kan "fange" et flydende dato interval:

Når Now() er passeret en bestem fast dato i måneden f.eks. den 15. og endnu ikke nået til den første onsdag i NY måned - så skal udtrykket være sand.

hvordan ser koden ud for at kunne løse dette problem ?
Avatar billede jekk Nybegynder
23. juli 2006 - 11:36 #1
NB!
den skal også kunne fange årskifte-problemet !
Avatar billede jekk Nybegynder
23. juli 2006 - 13:29 #2
NB!
hvis spørgsmålet kræver flere point ! skal jeg blot vide hvordan jeg gør det !
Avatar billede nielle Nybegynder
23. juli 2006 - 13:41 #3
Det er ikke helt klars hvad du mener med:

"Når Now() ... endnu ikke nået til den første onsdag i NY måned"

Now() giver dig jo altid datoen her og nu, altså i *denne* måned.
Avatar billede nielle Nybegynder
23. juli 2006 - 14:07 #4
Et bud:

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
Avatar billede jekk Nybegynder
23. juli 2006 - 19:49 #5
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 %>
Avatar billede nielle Nybegynder
23. juli 2006 - 21:01 #6
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?
Avatar billede jekk Nybegynder
23. juli 2006 - 21:59 #7
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 !

håber at denne tilføjelse skaber bedre klarhed !?
Avatar billede nielle Nybegynder
23. juli 2006 - 22:05 #8
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.
Avatar billede jekk Nybegynder
23. juli 2006 - 22:13 #9
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 ?
Avatar billede nielle Nybegynder
23. juli 2006 - 22:24 #10
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:

http://www.w3schools.com/vbscript/vbscript_ref_functions.asp#date
Avatar billede jekk Nybegynder
23. juli 2006 - 22:49 #11
udfra dine oplysninger, så skulle en kode, af følgende udseende løse mit behov - og det vil jeg afprøve imorgen....

; DAGNR
DeadlineDagnr = 15
AktuelDagnr = Day(Date())

;UGEDAGNR
DeadlineUgedagnr = 3
AktuelDeadlineUgenr = Weekday(Date(),vbMonday)

;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
;-------------------------------------------------------------------
Avatar billede jekk Nybegynder
23. juli 2006 - 22:50 #12
NB!
er der logik eller syntaksfejl i min kode ?
Avatar billede nielle Nybegynder
23. juli 2006 - 23:05 #13
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:

' DAGNR
DeadlineDagnr = 15
AktuelDagnr = Day(Date())

' UGEDAGNR
DeadlineUgedagnr = 3
AktuelDeadlineUgenr = Weekday(Date(), vbMonday)

' 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
Avatar billede jekk Nybegynder
24. juli 2006 - 10:20 #14
tak nielle -
sender du mig et svar...
Avatar billede nielle Nybegynder
24. juli 2006 - 13:14 #15
Svar :^)
Avatar billede nielle Nybegynder
24. juli 2006 - 15:14 #16
... doh :^)
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