Avatar billede mickill Nybegynder
18. februar 2004 - 10:38 Der er 15 kommentarer og
1 løsning

Antal uger mellem 2 givne datoer

Hej

jeg har gjort sådan:

DateDiff("ww", dato1, dato2)

for at finde antal uger fra dato1 til dato2, men hvis jeg f.eks. skal finde antal uger fra d. 1 januar til den 30. april får jeg 16 uger, selvom der faktisk er 17.

Hvordan retter jeg dette så jeg får det rigtige resultat ?

/Mickill
Avatar billede nute Nybegynder
18. februar 2004 - 10:48 #1
følgende kode giver mig 17 ...

<%
Dim objStartDate : objStartDate = DateSerial( "2004", "01", "01" )
Dim objEndDate : objEndDate = DateSerial( "2004", "04", "30" )
Response.Write DateDiff( "ww", objStartDate, objEndDate )
%>

/nute
Avatar billede Spotgun Seniormester
18. februar 2004 - 10:48 #2
DateDiff("ww", CDate("01-01-2004"), Cdate("30-04-2004")) gir 17 uger hos mig...

Og hvis den gøres mere specifik ved at fortælle den hvad den første dag i ugen er, og hvor mange dage der er i første uge af året, så gi'r den stadig 17...

DateDiff("ww", CDate("01-01-2004"), Cdate("30-04-2004"), 2, 2)

Prøv evt. den sidste linie jeg skrev her, så burde den være ligeglad med hvilken tidszone/datoformat din webserver er sat til at bruge...
Avatar billede mickill Nybegynder
18. februar 2004 - 11:06 #3
Ok, jeg bliver ved med at få 16 uger, men hvis jeg prøver f.eks. DateDiff("ww", CDate("01-01-2004"), Cdate("30-04-2004"), 2, 2) får jeg 17 uger.

Jeg henter mine datoer fra en formular:

Session.LCID = 1030

Dim beregn, dato1, dato2
beregn = request.querystring("beregn")
dato1 = request.form("dato1")
dato2 = request.form("dato2")

if beregn = "true" then
Response.Write "<font face='verdana' size='2'><center>Der er ialt:<br><b>"& DateDiff("ww", dato1, dato2) &" uger</b><br><br>i perioden:<br><b>"&dato1&" til "&dato2&"</b></center><br><br>"
Avatar billede nute Nybegynder
18. februar 2004 - 11:08 #4
hvad er formatet af dine datoer ? ... lav en

Response.write( "'" & dato1 & "' : '" & dato2 & "'" )

så vi kan teste med din kode

/nute
Avatar billede Spotgun Seniormester
18. februar 2004 - 11:17 #5
Tror også problemet kan være der. Prøv at caste dine datoer for en sikkerheds skyld:

Response.Write "<font face='verdana' size='2'><center>Der er ialt:<br><b>"& DateDiff("ww", CDate(dato1), CDate(dato2)) &" uger</b><br><br>i perioden:<br><b>"&dato1&" til "&dato2&"</b></center><br><br>"
Avatar billede mickill Nybegynder
18. februar 2004 - 11:20 #6
Når jeg udskriver mine datoer får jeg dette:

'05-01-2004' : '30-04-2004'
Avatar billede nute Nybegynder
18. februar 2004 - 11:22 #7
jamen, så passer det jo ?!?!

5. januar er 1. dagen i uge 2 ...
Avatar billede mickill Nybegynder
18. februar 2004 - 11:26 #8
Jamen hvis jeg tæller uger sammen på min kalender får jeg det til 17:

uge2, uge3, uge4.........uge18 = 17 uger

eller er det mig som er helt galt på den ???
Avatar billede nute Nybegynder
18. februar 2004 - 11:27 #9
hehe ... du er galt på den ...

uge 2 til uge 18 = 18 - 2 = 16

/nute
Avatar billede mickill Nybegynder
18. februar 2004 - 11:31 #10
Jamen, hvis nu uge 18 også skal tælles med ??

Dvs. at en påbegyndt uge skal tælles med, så bliver det da 17 ??
Avatar billede Spotgun Seniormester
18. februar 2004 - 11:39 #11
Hvis det er sådan noget du er ude i, så skal du jo - udover at måle antallet af uger mellem de to datoer - også kigge på hvilken ugedag slut-datoen er, for så at afgøre om du skal ligge 1 til antallet af uger...
Avatar billede nute Nybegynder
18. februar 2004 - 11:48 #12
HVad med:

<%@ language="VBScript" %>
<%
Dim objStartDate : objStartDate = DateSerial( "2004", "01", "05" )
Dim objEndDate : objEndDate = DateSerial( "2004", "04", "30" )
Dim intDays : intDays = DateDiff( "d", objStartDate, objEndDate )
Dim intRest : intRest = ( intDays mod 7 )
intDays = ( intDays / 7 ) & ""
intDays = Left( intDays, Instr( intDays, "." ) - 1 )
Response.Write "der er " &  intDays & " uge og " & intRest & " dage mellem de to datoer"
%>

/nute
Avatar billede Spotgun Seniormester
18. februar 2004 - 11:53 #13
...eller alternativt det her:

Function antalUger(start, slut)
    temp = DateDiff("ww", CDate(start), CDate(slut))
    If Weekday(CDate(start), 2) = 1 or Weekday(CDate(slut), 2) = 1 Then
        temp = temp + 1
    End If
    antalUger = temp
End Function

Response.Write antalUger("05-01-2004", "30-04-2004")
Avatar billede mickill Nybegynder
18. februar 2004 - 12:15 #14
Okay nu får jeg 17 uger, men det gør jeg også hvis jeg skriver 02-01-2004 til 30-04-2004 og her burde det vel give 18 uger ??
Avatar billede nute Nybegynder
18. februar 2004 - 12:29 #15
det kommer an på hvad du definerer som "uge" ... hvis én uge = 7 kalenderdage, så passer det nok, men hvis en uge = den "officielle" ugeangivelse (1. januar er i uge 1 og 5. januar er i uge 2), så er det forkert. Den mest nøjagtige angivelse må være det jeg postet @ 18/02-2004 11:48:11, hvor du får antal uger og dage mellem de to datoer.

/nute
Avatar billede nute Nybegynder
27. februar 2004 - 18:50 #16
mickill >> lukker du spm ?
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