Avatar billede aller Nybegynder
29. juli 2003 - 02:17 Der er 5 kommentarer og
2 løsninger

Returner datoer i en given uge

Hej,

Jeg har nu siddet i nogle timer og stirret mig blind efter en funktion der kan returnere datoerne i en hvilken som helst uge.

Hvis jeg for eksempel skriver:

Response.Write DatesInWeek("31")

skal den så (helst :) skrive sådan her (altså MM-DD-YYYY):
[ 07-28-2003 to 08-03-2003 ]


Jeg mener det må være noget med DateDiff, og så finde forskellen, men jeg kan squ ikke lige finde ud af at sætte det rigtigt sammen :(

Sætter stor pris på al hjælp :D

Mvh.

Kim.
Avatar billede jpvj Nybegynder
29. juli 2003 - 02:29 #1
Kan du ikke komme igennem med noget lignende:

StartDate = DateAdd("w", 32, "01-01-2003")
EndDate = DateAdd("d", 6, DateValue(StartDate))
Avatar billede jpvj Nybegynder
29. juli 2003 - 02:34 #2
Ikke helt.. Der skal bruges ww og året skal blot angives med 4 cifre:

<HTML>
<HEAD>
</HEAD>
<BODY>
<%
StartDate = DateAdd("ww", 32, "2003")
EndDate = DateAdd("d", 6, DateValue(StartDate))

Response.Write(DateValue(StartDate) & "<BR>")
Response.Write(DateValue(EndDate))
%>
</BODY>
</HTML>
Avatar billede aller Nybegynder
29. juli 2003 - 07:37 #3
Det virker desværre ikke :(

Jeg har nu følgende:

<strong>Fixtures for week: <%= SelectedWeek %></strong>
<%
StartDate = DateAdd("ww", SelectedWeek, "2003")
EndDate = DateAdd("d", 6, DateValue(StartDate))
Response.Write "[ " & DateValue(StartDate) & " - " & DateValue(EndDate) & " ]"
%>

SelectedWeek er en variabel fra Querystring, like fixtures.asp?week=31

Hvis week = 31 så får jeg følgende output:

Fixtures for week: 31 [ 28-01-1906 - 03-02-1906 ]

:(
Avatar billede cesil Nybegynder
29. juli 2003 - 08:28 #4
Den her funktion returnere datoen mandag i en hvilken som helst uge.
Det skulle jo så være en smal og lægge 6 dage til og få datoen på søndag.

<%
Function FDIU(yyyy, uge)
    FDIU = DateSerial(yyyy, 1, 7 * uge - 3 - Weekday(DateSerial(yyyy, 0, 0), 3))
End Function


response.write fdiu(2003,33)
%>
Avatar billede cesil Nybegynder
29. juli 2003 - 08:33 #5
sådan her

<%
Function FDIU(yyyy, uge)
    FDIU = DateSerial(yyyy, 1, 7 * uge - 3 - Weekday(DateSerial(yyyy, 0, 0), 3))
End Function


mandag = fdiu(2003,33)
sondag = dateadd("d",7,mandag)

response.write "Fixtures for week: 33 [" & mandag & " - " & sondag & "]"
%>
Avatar billede zembla Nybegynder
29. juli 2003 - 11:25 #6
Cesil -> Funktionen 'FDIU' er desværre ikke 100% vandtæt. Den har et problem med uge 1 i fx år 1999. Output er vist herunder - og ja, det er ikke korrekt. For hver uge i fx år 1999 og 2010 returnere funktion faktisk noget forkert.

  Fixtures for week: 1 [28-12-1998 - 03-01-1999]

Jeg har lavet en funktion, som tager højde for reglen med antallet af dage i første uge og dermed om ugen tilhører aktuelle eller sidste år. Den ser således ud:

Function WeekToDate(InWeek, InYear)
  Dim StartDay
  Dim daysBack
  StartDay = Weekday(DateSerial(InYear, 1, 1), 2)

  daysBack = 7 - StartDay

  If daysBack >= 3 Then
    WeekToDate = DateSerial(InYear, 1, 1) - StartDay + 1 + (InWeek - 1) * 7
  Else
    WeekToDate = DateSerial(InYear, 1, 8) - StartDay + 1 + (InWeek - 1) * 7
  End If 
End Function

Som før:
mandag = WeekToDate(1,1999)
sondag = dateadd("d",6,mandag) 'bemærk kun 6 dage!

response.write "Fixtures for week: 1 [" & mandag & " - " & sondag & "]"

Resultatet er så: Fixtures for week: 1 [04-01-1999 - 10-01-1999]
Avatar billede aller Nybegynder
29. juli 2003 - 22:21 #7
Tusind tak for hjælpen alle sammen, jeg giver cesil 35 point for at have forsøgt med en næsten godkendt funktion, men zembla får 65 for at have lavet en der virker 100% (efter mine tests)....

Igen, tak for hjælpen - også til dig jpjv for at have forsøgt :)

Med venlig hilsen

Kim.
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



IT-JOB