11
Hallo Jörg,
Die Abfrage habe ich mir leichter vorstellt.
Vielen Dank
Gruß
Webuser
Die Abfrage habe ich mir leichter vorstellt.
Vielen Dank
Gruß
Webuser
$free_days = array();
$next_start = $today = new DateTime('now');
$last_day = new DateTime('now');
$last_day->add(new DateInterval('P1Y'));
while ($row = mysql_fetch_array($result)) {
$start = $next_start;
$end = new DateTime($row['Von']);
$next_start = new DateTime($row['Bis']);
if ($end < $start) {
continue;
$day = $start;
while ($day < $end) {
$free_days[] = $day->format('d.m.Y');
if ($day >= $last_day) {
break 2;
}
$day->add(new DateInterval('P1D'));
}
}
if ($day < $last_day) {
while ($day < $last_day) {
$free_days[] = $day->format('d.m.Y');
$day->add(new DateInterval('P1D'));
}
}
$day = $next_start;
if ($day < $last_day) {
while ($day < $last_day) {
$free_days[] = $day->format('d.m.Y');
$day->add(new DateInterval('P1D'));
}
}
sieht leider noch genauso aus.
CREATE TABLE IF NOT EXISTS `termine` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`von` date NOT NULL,
`bis` date NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `termine` (`id`, `von`, `bis`) VALUES
(1, '2014-03-16', '2014-03-23'),
(2, '2014-03-29', '2014-03-31'),
(3, '2014-12-24', '2014-12-31');
<?php
// Datenbankverbindung
$result = mysql_query("
SELECT *
FROM termine
WHERE bis > CURDATE()
ORDER BY bis
");
$free_days = array();
$next_start = $today = new DateTime('now');
$last_day = new DateTime('now');
$last_day->add(new DateInterval('P1Y'));
while ($row = mysql_fetch_array($result)) {
$start = $next_start;
$end = new DateTime($row['von']);
$next_start = new DateTime($row['bis']);
if ($end < $start) {
continue;
}
$day = $start;
while ($day < $end) {
$free_days[] = $day->format('d.m.Y');
if ($day >= $last_day) {
break 2;
}
$day->add(new DateInterval('P1D'));
}
}
$day = $next_start;
if ($day < $last_day) {
while ($day < $last_day) {
$free_days[] = $day->format('d.m.Y');
$day->add(new DateInterval('P1D'));
}
}
foreach ($free_days as $free_day) {
echo $free_day . "<br>";
}
09.03.2014
10.03.2014
11.03.2014
12.03.2014
13.03.2014
14.03.2014
15.03.2014
23.03.2014
24.03.2014
25.03.2014
26.03.2014
27.03.2014
28.03.2014
31.03.2014
01.04.2014
02.04.2014
03.04.2014
04.04.2014
05.04.2014
06.04.2014
07.04.2014
08.04.2014
09.04.2014
10.04.2014
11.04.2014
12.04.2014
13.04.2014
14.04.2014
15.04.2014
16.04.2014
17.04.2014
18.04.2014
19.04.2014
20.04.2014
21.04.2014
22.04.2014
23.04.2014
24.04.2014
25.04.2014
26.04.2014
27.04.2014
28.04.2014
29.04.2014
30.04.2014
01.05.2014
02.05.2014
03.05.2014
04.05.2014
05.05.2014
06.05.2014
07.05.2014
08.05.2014
09.05.2014
10.05.2014
11.05.2014
12.05.2014
13.05.2014
14.05.2014
15.05.2014
16.05.2014
17.05.2014
18.05.2014
19.05.2014
20.05.2014
21.05.2014
22.05.2014
23.05.2014
24.05.2014
25.05.2014
26.05.2014
27.05.2014
28.05.2014
29.05.2014
30.05.2014
31.05.2014
01.06.2014
02.06.2014
03.06.2014
04.06.2014
05.06.2014
06.06.2014
07.06.2014
08.06.2014
09.06.2014
10.06.2014
11.06.2014
12.06.2014
13.06.2014
14.06.2014
15.06.2014
16.06.2014
17.06.2014
18.06.2014
19.06.2014
20.06.2014
21.06.2014
22.06.2014
23.06.2014
24.06.2014
25.06.2014
26.06.2014
27.06.2014
28.06.2014
29.06.2014
30.06.2014
01.07.2014
02.07.2014
03.07.2014
04.07.2014
05.07.2014
06.07.2014
07.07.2014
08.07.2014
09.07.2014
10.07.2014
11.07.2014
12.07.2014
13.07.2014
14.07.2014
15.07.2014
16.07.2014
17.07.2014
18.07.2014
19.07.2014
20.07.2014
21.07.2014
22.07.2014
23.07.2014
24.07.2014
25.07.2014
26.07.2014
27.07.2014
28.07.2014
29.07.2014
30.07.2014
31.07.2014
01.08.2014
02.08.2014
03.08.2014
04.08.2014
05.08.2014
06.08.2014
07.08.2014
08.08.2014
09.08.2014
10.08.2014
11.08.2014
12.08.2014
13.08.2014
14.08.2014
15.08.2014
16.08.2014
17.08.2014
18.08.2014
19.08.2014
20.08.2014
21.08.2014
22.08.2014
23.08.2014
24.08.2014
25.08.2014
26.08.2014
27.08.2014
28.08.2014
29.08.2014
30.08.2014
31.08.2014
01.09.2014
02.09.2014
03.09.2014
04.09.2014
05.09.2014
06.09.2014
07.09.2014
08.09.2014
09.09.2014
10.09.2014
11.09.2014
12.09.2014
13.09.2014
14.09.2014
15.09.2014
16.09.2014
17.09.2014
18.09.2014
19.09.2014
20.09.2014
21.09.2014
22.09.2014
23.09.2014
24.09.2014
25.09.2014
26.09.2014
27.09.2014
28.09.2014
29.09.2014
30.09.2014
01.10.2014
02.10.2014
03.10.2014
04.10.2014
05.10.2014
06.10.2014
07.10.2014
08.10.2014
09.10.2014
10.10.2014
11.10.2014
12.10.2014
13.10.2014
14.10.2014
15.10.2014
16.10.2014
17.10.2014
18.10.2014
19.10.2014
20.10.2014
21.10.2014
22.10.2014
23.10.2014
24.10.2014
25.10.2014
26.10.2014
27.10.2014
28.10.2014
29.10.2014
30.10.2014
31.10.2014
01.11.2014
02.11.2014
03.11.2014
04.11.2014
05.11.2014
06.11.2014
07.11.2014
08.11.2014
09.11.2014
10.11.2014
11.11.2014
12.11.2014
13.11.2014
14.11.2014
15.11.2014
16.11.2014
17.11.2014
18.11.2014
19.11.2014
20.11.2014
21.11.2014
22.11.2014
23.11.2014
24.11.2014
25.11.2014
26.11.2014
27.11.2014
28.11.2014
29.11.2014
30.11.2014
01.12.2014
02.12.2014
03.12.2014
04.12.2014
05.12.2014
06.12.2014
07.12.2014
08.12.2014
09.12.2014
10.12.2014
11.12.2014
12.12.2014
13.12.2014
14.12.2014
15.12.2014
16.12.2014
17.12.2014
18.12.2014
19.12.2014
20.12.2014
21.12.2014
22.12.2014
23.12.2014
31.12.2014
01.01.2015
02.01.2015
03.01.2015
04.01.2015
05.01.2015
06.01.2015
07.01.2015
08.01.2015
09.01.2015
10.01.2015
11.01.2015
12.01.2015
13.01.2015
14.01.2015
15.01.2015
16.01.2015
17.01.2015
18.01.2015
19.01.2015
20.01.2015
21.01.2015
22.01.2015
23.01.2015
24.01.2015
25.01.2015
26.01.2015
27.01.2015
28.01.2015
29.01.2015
30.01.2015
31.01.2015
01.02.2015
02.02.2015
03.02.2015
04.02.2015
05.02.2015
06.02.2015
07.02.2015
08.02.2015
09.02.2015
10.02.2015
11.02.2015
12.02.2015
13.02.2015
14.02.2015
15.02.2015
16.02.2015
17.02.2015
18.02.2015
19.02.2015
20.02.2015
21.02.2015
22.02.2015
23.02.2015
24.02.2015
25.02.2015
26.02.2015
27.02.2015
28.02.2015
01.03.2015
02.03.2015
03.03.2015
04.03.2015
05.03.2015
06.03.2015
07.03.2015
08.03.2015
09.03.2015
a)
immer die Daten zwischen den VON BIS ausschließen
$next_start = new DateTime($row['bis']);
$next_start->add(new DateInterval('P1D'));
b)
es müssen min. 3 Tage hintereinander frei sein.
if ($end < $start) {
continue;
}
$interval = $end->diff($start);
if ($interval->format('%a') < 3) {
continue;
}