Avatar billede hundevennen Nybegynder
17. april 2009 - 07:33 Der er 7 kommentarer og
1 løsning

lave ugenr til ugeStartDate og ugeEndDate

jeg trækker via en form et ugenummer og på en søgeside og har brug for at få lavet 2 variabler ud af et ugenummer.
altså noget som følgende:

ugenr = request.form ("ugenr")
ugestart = dateetellerandet(ugenr).......
ugeslut = dateetellerandet(ugenr)......
Avatar billede CCodam Nybegynder
17. april 2009 - 09:03 #1
Jeg har ikke lige noget at teste med, men følgende burde virke:

workingYear = kode til at få det givne år
startDate = DateSerial(workingYear, 1, 1)

ugenr = request.form ("ugenr")
ugeStartDate = DateAdd("ww", ugenr, startDate)
ugeEndDate = DateAdd("d", 6, startDate)


Ellers må du lige skrive :)
Avatar billede hundevennen Nybegynder
17. april 2009 - 10:26 #2
CCodam - din kode giver mig ved brug af ugenr = 16 denne dato:
22-04-00
Avatar billede hundevennen Nybegynder
17. april 2009 - 10:35 #3
hvis jeg ændre koden til
workingYear = kode til at få det givne år
startDate = DateSerial(2009, 1, 1)

ugenr = request.form ("ugenr")
ugeStartDate = DateAdd("ww", ugenr, startDate)
ugeEndDate = DateAdd("d", 6, startDate)

response.write ugeStartDate bliver resultatet 23-04-09
Avatar billede CCodam Nybegynder
17. april 2009 - 13:29 #4
#3 Hmm...forstår virkelig ikke hvorfor det ikke virker :|

Men så prøver vi da bare noget helt andet, og mere kompleks:

[/i]function getDaysInWeek ($weekNumber, $year) {
  // Start fra '0104' da den 4. Januar altid er i uge 1.
  $time = strtotime($year . '0104 +' . ($weekNumber - 1)
                    . ' weeks');
  // Få timestamp på den første dag i ugen
  $mondayTime = strtotime('-' . (date('w', $time) - 1) . ' days',
                          $time);
  // Få timestamps på alle dage i ugen 0 -> 6
  $dayTimes = array ();
  for ($i = 0; $i < 7; ++$i) {
    $dayTimes[] = strtotime('+' . $i . ' days', $mondayTime);
  }
  // Returnere timestamps for alle dage i ugen, i et array
  return $dayTimes;
}

For at finde datoen for en dag i en given uge:

[i]$dayTimes = getDaysInWeek(ugenr, 2009);
echo (strftime('%e-%m-%Y', $dayTimes[0] . "n"); // Udskriver timestamped for mandag, i den givne uge
echo (strftime('%e-%m-%Y', $dayTimes[6] . "n"); // Udskriver timestamped for Søndag, i den givne uge


Formattet er: dd-mm-yyyy
Du kan ændre dette format, ved at kigge her: http://dk2.php.net/strftime

Du må endnu engang skrive, hvis der er problemer, eller hvis du har spørgsmål til scriptet
Avatar billede CCodam Nybegynder
17. april 2009 - 13:32 #5
Ups jeg kom til lige at lave en fejl med kursiven, fjern klammen med med /i på linien function getDaysInWeek ($weekNumber, $year) { og klammer og klammen med i på linien $dayTimes = getDaysInWeek(ugenr, 2009);
Avatar billede hundevennen Nybegynder
17. april 2009 - 14:02 #6
jeg har fundet dette og det virker
function findMandag(uge,aar)
d = DateSerial(aar, 1, 1)    ' 1/1/i år
'find mandag i uge 1
If DatePart("ww", d, 2, 2) = 1 Then    'Hvis 1/1 er i uge 1
  While(DatePart("w", d, 2, 2) <> 1)    'find sidste mandag
    d = DateAdd("d", -1, d)
  WEnd
Else
  While(DatePart("ww", d, 2, 2) <> 1)  'find næste mandag
    d = DateAdd("d", 1, d)
  WEnd
End If
findMandag = DateAdd("d", 7*(uge-1), d) 'juster til ugenummer, mandag
end function

ugenr = 7
aartal = 2005
response.write "Uge " & ugenr & "<br>"
response.write "Mandag d. " & findMandag(ugenr, aartal)

læg et svar og tak for inspirationen
Avatar billede CCodam Nybegynder
17. april 2009 - 15:24 #7
#6 Ja ok, jeg må huske at have noget at teste på, før jeg ligger svar næste gang, så jeg er sikker på det er en brugbar løsning jeg kommer med..
Men tak for pointne :)
Avatar billede ingeman Juniormester
02. maj 2010 - 12:36 #8
Den her returner mandag - men hvad med tirsdag,onsdag,torsdag,fredag ?
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