Alle zondagen van een jaar met interval
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
}
$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;
}
alle zondagen van 2014:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
?>
$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...
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.
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
?
Als output wil ik 05-01-2014, maar dat is wel aan te passen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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;
}
?>
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:
Ik heb 2014 als jaar meegeven maar krijg als jaar 2015 terug en krijg het volgende terug.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
[1] => DateTime Object
(
[date] => 2015-01-04 00:00:00
[timezone_type] => 3
[timezone] => Europe/Amsterdam
)
(
[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.
Code (php)
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
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));
?>
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));
?>
Bedankt deze werkt.