Alle zondagen van een jaar met interval

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

M B

M B

19/06/2014 00:42:11
Quote Anchor link
Hallo,

Wat ik wil is het volgende maar kom er niet uit hoe het moet.
Een array met bijv. alle zondagen van 2014 waar je een interval kunt instellen zodat elke dag een x aantal keer herhaald wordt.


Wat ik momenteel heb is
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function getDays($year, $startMonth=1, $startDay=1, $dayOfWeek='sunday', $interval=1, $output='d-m-Y') {
    $start = new DateTime(
        sprintf('%04d-%02d-%02d', $year, $startMonth, $startDay)
    );
    $start->modify($dayOfWeek);
    $end   = new DateTime(
        sprintf('%04d-12-31', $year)
    );
    $end->modify( '+1 day' );
    $interval = new DateInterval('P1W');
    $period   = new DatePeriod($start, $interval, $end);

    $aOutput = array();

    foreach ($period as $dt) {
        $aOutput[] = $dt->format($output);
    }

    return $aOutput;
}
 
PHP hulp

PHP hulp

25/04/2024 21:47:02
 
Ivo P

Ivo P

19/06/2014 09:27:31
Quote Anchor link
ik begrijp het stuk met interval niet, zeker niet in combinatie met "aantal keer herhaald".


alle zondagen van 2014:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$oDate
= new DateTime('2014-01-01');
$oEndDate = clone $oDate;
$oEndDate->modify('+1 year');

$oDate->modify('-1 day');


// We zitten nu op de laatste dag van het vorig jaar en gaan nu op zoek naar de eerste zondag van 2014 en doen dat zolang we voor de einddatum zitten

do {
  $oDate->modify('next sunday');
  $aSundays[] = $oDate;

}
while ($oDate < $oEndDate);

?>




Toevoeging op 19/06/2014 09:29:10:

while lus beetje aanpassen denk ik: zo te zien eindig je nu met de eerste zondag van 2015...
 
M B

M B

19/06/2014 09:41:30
Quote Anchor link
Ik weet ook niet als interval het juiste woord is.
Maar wat ik bedoel is dat ik een dag bijv. zondag kan opgeven en een jaar en hoe vaak elke datum herhaald moet worden.

Ik hoop dat het zo wat duidelijker is.
 
Ivo P

Ivo P

19/06/2014 09:45:01
Quote Anchor link
dus je wilt bijvoorbeeld 2014 opgeven en 3

en dan krijg je het array

$array[0] = "5 jan 2014"
$array[1] = "5 jan 2014"
$array[2] = "5 jan 2014"
$array[3] = "12 jan 2014"
$array[4] = "12 jan 2014"
$array[5] = "12 jan 2014"

etc
?
 
M B

M B

19/06/2014 09:49:34
Quote Anchor link
Dat is wat ik wil en ik wil eigenlijk elke dag van de week kunnen kiezen, zondag zal het meeste voorkomen dus die wordt de standaard.

Als output wil ik 05-01-2014, maar dat is wel aan te passen.
 
Ivo P

Ivo P

19/06/2014 09:55:39
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

function getDagen($jaartal, $aantal=1, $sDayname='sunday')
{

  $oDate = new DateTime($jaartal .'-01-01');
  $oEndDate = clone $oDate;
  $oEndDate->modify('+1 year');

  $oDate->modify('-1 day');


  // We zitten nu op de laatste dag van het vorig jaar en gaan nu op
  // zoek naar de eerste "zondag" van 2014 en   doen dat zolang we voor de einddatum zitten

  $oDate->modify('next '. $sDayname);
  while ($oDate < $oEndDate) {
    for($i=0;$i<$aantal;$i++){
      $aDates[] = $oDate;
    }

    $oDate->modify('next '. $sDayname);
  }

  return $aDates;

}

?>


Als je strings in je array wilt hebben, dan $aDates[] = $oDate->format(....);

aanroep:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php

$a
= getDagen(2015, 'Monday', 3);
?>
 
M B

M B

19/06/2014 10:05:46
Quote Anchor link
Er gaat nog iets niet goed.
Ik heb 2014 als jaar meegeven maar krijg als jaar 2015 terug en krijg het volgende terug.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
[1] => DateTime Object
        (
            [date] => 2015-01-04 00:00:00
            [timezone_type] => 3
            [timezone] => Europe/Amsterdam
        )

En dat dan keer het aantal dagen, dus elke keer dezelfde datum.
 
Ivo P

Ivo P

19/06/2014 10:13:50
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

function getDagen($jaartal, $aantal=1, $sDayname='sunday')
{

  $oDate = new DateTime($jaartal .'-01-01');
  $oEndDate = clone $oDate;
  $oEndDate->modify('+1 year');

  $oDate->modify('-1 day');

  // We zitten nu op de laatste dag van het vorig jaar en gaan nu op
  // zoek naar de eerste "zondag" van 2014 en   doen dat zolang we voor de einddatum zitten

  $oDate->modify('next '. $sDayname);
  while ($oDate < $oEndDate) {
    for($i=0;$i<$aantal;$i++){
      $aDates[] = $oDate->format('Y-m-d');
    }

    $oDate->modify('next '. $sDayname);
  }

  return $aDates;
}


$a = getDagen(2014, 2, 'monday');

printf('<pre>%s</pre>', print_r($a, 1));
?>
 
M B

M B

19/06/2014 11:07:31
Quote Anchor link
Bedankt deze werkt.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.