Avatar billede oomalkeoo Nybegynder
29. april 2008 - 21:33 Der er 8 kommentarer og
1 løsning

lave array med datoer ud fra uger?

Hejsa,

Er igang med at finde en function der kan samle en datoer i et array hvor eneste input er 16 17 2008 .. så vil jeg samle alle dagene i et array, altså alle de dage som i uge 16-17 ..

Har prøvet at se på noget gammel script, men det virker ikke helt som det skal, tror det er en bøvlet måde men ved ikke? hmm

function getDateInWeek($week, $year, $format='Y-m-d'){

  $day1nr = date("w", strtotime("$year-01-01"));
  $day1nr = $day1nr == 0 ? 6 : $day1nr - 1;
  $week1 = $day1nr < 4 ? 1 : 0;

  $monday1 = date("Y-m-d", strtotime($year."-01-01 -$day1nr day"));
  $week -= $week1;

  for ($i=0; $i<7; $i++) {
      $days = ($week * 7) + $i;
      $date[] =  date($format, strtotime("$monday1 $days day"));
  }

  return $date;

}
$date_in_week = getDateInWeek(16, 2008);
$date_in_week = getDateInWeek(17, 2008);
print_r($date_in_week); 


på min måde der skal jeg jo så "merge" array'sne.. men der må da være en lettere metode måske
Avatar billede jakobdo Ekspert
30. april 2008 - 08:12 #1
Hvad er det du ønsker ?
En funktion som tager input 16, 17, 2008 og giver dig datoerne i uge 16 og 17 i år 2008 ?
Avatar billede oomalkeoo Nybegynder
30. april 2008 - 20:02 #2
det er lige det jeg ønsker ja jakobdo
Avatar billede jakobdo Ekspert
30. april 2008 - 21:21 #3
Jeg fandt en kode som minder om den du har der.

function getDaysInWeek ($weekNumber, $year) {
    // Count from '0104' because January 4th is always in week 1
    // (according to ISO 8601).
    $time = strtotime($year . '0104 +' . ($weekNumber - 1) . ' weeks');
    // Get the time of the first day of the week
    $mondayTime = strtotime('-' . (date('w', $time) - 1) . ' days', $time);
    // Get the times of days 0 -> 6
    $dayTimes = array ();
  for ($i = 0; $i < 14; ++$i) {
        $dayTimes[] = strtotime('+' . $i . ' days', $mondayTime);
  }
  // Return timestamps for mon-sun.
  return $dayTimes;
}

Og rettede:
for ($i = 0; $i < 7; ++$i) {
til:
for ($i = 0; $i < 14; ++$i) {

Hvilket betyder, giver du den uge 10, får du ugedagene i uge 10 og 11.
Kan det bruges ?
Avatar billede oomalkeoo Nybegynder
01. maj 2008 - 01:19 #4
#jakobdo

Ja, det er næsten lige som det skal være, det er super nice! På den der måde, får jeg det så i et array? prøvede en print_f på den function og fik godtnok dataerne ud, men hvordan kan jeg evt lave en løkke som løber igennem alle de forskellige "indlæg" i det array?
Avatar billede jakobdo Ekspert
01. maj 2008 - 08:10 #5
Du laver følgende:

$dates = getDaysInWeek(16,2008);

Og så kan data løbes igennem med:
for($i = 0; $i < count($dates); $i++{
  echo 'Dates[' . $i . '] indeholder: ' . $dates[$i] . '<br />';
}

eller på denne måde:
foreach($dates AS $id => $date){
  echo 'Dates[' . $id . '] indeholder: ' . $date . '<br />';
}
Avatar billede oomalkeoo Nybegynder
01. maj 2008 - 10:33 #6
ah, havde selv bare lavet en stavefejl i min egen version som lignede den der, mange tak for hjælpen! Smider du svar?
Avatar billede jakobdo Ekspert
01. maj 2008 - 17:09 #7
Svar!
Avatar billede oomalkeoo Nybegynder
02. maj 2008 - 17:47 #8
:)
Avatar billede jakobdo Ekspert
02. maj 2008 - 18:17 #9
Takker for point.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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