Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tag bzw. Zeit abhängiger Inhalt ausgeben

0 views
Skip to first unread message

Sascha Blum

unread,
Feb 6, 2010, 2:22:37 PM2/6/10
to
Hallo Leute,

ich bräuchte ein PHP-Script mit folgender Aufgabe:

Und zwar soll jeden Mittwoch im Zeitraum von 20:30 - 22:00 Uhr und an jeden
Freitag im Zeitraum von 20:00 bis 22:00 Uhr ein Text ausgegeben werden,
nennen wir ihn mal "Inhalt A". Und an allen anderen Tagen und außerhalb der
oben genannten Zeit soll nicht "Inhalt A" sondern "Inhalt B" ausgegeben
werden. Und an einem bestimmten Datum soll weder "Inhalt A" noch "B"
erscheinen sondern "Inhalt C". Ich hab da jetzt mal den 24.12. als Beispiel
eingesetzt.

Habe mal versucht dazu ein Script zu schreiben, habs aber noch nicht
getestet. Würde gern dazu mal die Meinung anderer hören ob das so richtig
wäre was ich da gemacht habe oder mal hören wie das sonst realisierbar wäre.

<?PHP

$timestamp = time();

$wochentage=array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag",
"Freitag","Samstag");
$wochentag=$wochentage[date("w")];

$datum = date("d.m.Y",$timestamp);

$uhrzeit = date("H:i",$timestamp);

if ($wochentag == "Mittwoch" AND $uhrzeit>"20:30" && $uhr<"22:00" or
$uhr=="20:30")
{
$text = "Inhalt A";
}
if ($wochentag == "Freitag" AND $uhrzeit>"20:00" && $uhr<"22:00" or
$uhr=="20:00")
{
$text = "Inhalt A";
}
if ($datum == "24.12.")
{
$text = "Inhalt C";
}
else
{
$text = "Inhalt B";
}

echo "$text";

?>

Besten Dank vorab.

Viele Grüße

Sascha

Claus Reibenstein

unread,
Feb 6, 2010, 2:48:28 PM2/6/10
to
Sascha Blum schrieb:

> Und zwar soll jeden Mittwoch im Zeitraum von 20:30 - 22:00 Uhr und an jeden
> Freitag im Zeitraum von 20:00 bis 22:00 Uhr ein Text ausgegeben werden,
> nennen wir ihn mal "Inhalt A". Und an allen anderen Tagen und außerhalb der
> oben genannten Zeit soll nicht "Inhalt A" sondern "Inhalt B" ausgegeben
> werden. Und an einem bestimmten Datum soll weder "Inhalt A" noch "B"
> erscheinen sondern "Inhalt C". Ich hab da jetzt mal den 24.12. als Beispiel
> eingesetzt.

Eigentlich kein Problem.

> Habe mal versucht dazu ein Script zu schreiben, habs aber noch nicht
> getestet.

Hättste mal tun sollen :-)

> Würde gern dazu mal die Meinung anderer hören ob das so richtig
> wäre was ich da gemacht habe oder mal hören wie das sonst realisierbar wäre.
>
> <?PHP
>
> $timestamp = time();
>
> $wochentage=array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag",
> "Freitag","Samstag");

Für Deine Anwendung sollte eigentlich dies genügen:

$wochentage = array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");

> $wochentag=$wochentage[date("w")];
>
> $datum = date("d.m.Y",$timestamp);

Wo kommt $timestamp her?

> $uhrzeit = date("H:i",$timestamp);
>
> if ($wochentag == "Mittwoch" AND $uhrzeit>"20:30" && $uhr<"22:00" or
> $uhr=="20:30")

Wo kommt $uhr her? Warum mal "AND" und mal "&&"? Warum prüfst Du 20:30
2x ab? Der Operator ">=" existiert:

if ($wochentag == 'Mi' && $uhrzeit >= '20:30' && $uhrzeit < '22:00')
$text = "Inhalt A";

> {
> $text = "Inhalt A";
> }
> if ($wochentag == "Freitag" AND $uhrzeit>"20:00" && $uhr<"22:00" or
> $uhr=="20:00")
> {
> $text = "Inhalt A";
> }

Warum fasst Du diese beiden if-Anweisungen nicht zu einer zusammen?

if (($wochentag == 'Mi' && $uhrzeit >= '20:30' ||
$wochentag == 'Mi' && $uhrzeit >= '20:00') && $uhrzeit < '22:00')
$text = "Inhalt A";

> if ($datum == "24.12.")
> {
> $text = "Inhalt C";
> }
> else
> {
> $text = "Inhalt B";
> }
>
> echo "$text";

An dieser Stelle bekommst Du immer "Inhalt B" ausgegeben, aber niemals
"Inhalt A" (falsche Reihenfolge der if-Abfragen) oder "Inhalt C"
(date('d.m.Y') ergibt niemals '24.12.'). Ändere die Reihenfolge der
if-Abfragen und verwende "else" an den richtigen Stellen. Dann klappt's
auch mit "Inhalt A" und "Inhalt C".

Gruß. Claus

Sascha Blum

unread,
Feb 6, 2010, 3:01:05 PM2/6/10
to
Hallo,

Claus Reibenstein wrote:

>> Würde gern dazu mal die Meinung anderer hören ob das so richtig
>> wäre was ich da gemacht habe oder mal hören wie das sonst realisierbar
>> wäre.
>>
>> <?PHP
>>
>> $timestamp = time();
>>
>> $wochentage=array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag",
>> "Freitag","Samstag");
>
> Für Deine Anwendung sollte eigentlich dies genügen:
>
> $wochentage = array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");

ok, danke


>> $wochentag=$wochentage[date("w")];
>>
>> $datum = date("d.m.Y",$timestamp);
>
> Wo kommt $timestamp her?

der stand doch ganz am Anfang in meinem Script:

$timestamp = time();

oder wäre das falsch?


>> $uhrzeit = date("H:i",$timestamp);
>>
>> if ($wochentag == "Mittwoch" AND $uhrzeit>"20:30" && $uhr<"22:00" or
>> $uhr=="20:30")
>
> Wo kommt $uhr her? Warum mal "AND" und mal "&&"? Warum prüfst Du 20:30
> 2x ab? Der Operator ">=" existiert:

ah ok Fehler $uhr müste $uhrzeit heißen ...

Viele Grüße

Sascha

Sascha Blum

unread,
Feb 6, 2010, 3:30:42 PM2/6/10
to
Hallo,

Claus Reibenstein wrote:

[...]

> if (($wochentag == 'Mi' && $uhrzeit >= '20:30' ||
> $wochentag == 'Mi' && $uhrzeit >= '20:00') && $uhrzeit < '22:00')
> $text = "Inhalt A";
>
>> if ($datum == "24.12.")
>> {
>> $text = "Inhalt C";
>> }
>> else
>> {
>> $text = "Inhalt B";
>> }
>>
>> echo "$text";
>
> An dieser Stelle bekommst Du immer "Inhalt B" ausgegeben, aber niemals
> "Inhalt A" (falsche Reihenfolge der if-Abfragen) oder "Inhalt C"
> (date('d.m.Y') ergibt niemals '24.12.'). Ändere die Reihenfolge der
> if-Abfragen und verwende "else" an den richtigen Stellen. Dann klappt's
> auch mit "Inhalt A" und "Inhalt C".

... ok das mit den Schleifen hab ich wohl noch nicht ganz verstanden.

Wäre die Schleifenreihenfolge so richtig:

if (($wochentag == 'Mi' && $uhrzeit >= '20:30' ||

$wochentag == 'Fr' && $uhrzeit >= '20:00') && $uhrzeit < '22:00')
$text = "Inhalt A";

else
{

if ($datum == "24.12.")
{
$text = "Inhalt C";
}

else

$text = "Inhalt B";

}

... oder mach ich da immer noch einen Denkfehler bei der Schleife?

OK das mit dem Datum muß ich noch irgendwie rausfinden so das man das Jahr
weglassen kann ...


Viele Grüße

Sascha

Claus Reibenstein

unread,
Feb 6, 2010, 3:58:18 PM2/6/10
to
Sascha Blum schrieb:

> Claus Reibenstein wrote:
>
>>> $datum = date("d.m.Y",$timestamp);
>>
>> Wo kommt $timestamp her?
>
> der stand doch ganz am Anfang in meinem Script:
>
> $timestamp = time();

Sorry, hatte ich übersehen.

In diesem Fall kannst Du Dir $timestamp aber auch komplett schenken und
brauchst date() mit nur einem Argument aufzurufen.

Gruß. Claus

Sascha Blum

unread,
Feb 6, 2010, 4:06:33 PM2/6/10
to
Hallo,

Claus Reibenstein wrote:

brauch ich dieses timestamp nicht für die Uhrzeit?

Viele Grüße

Sascha

Claus Reibenstein

unread,
Feb 6, 2010, 4:07:39 PM2/6/10
to
Sascha Blum schrieb:

> Claus Reibenstein wrote:
>
>> An dieser Stelle bekommst Du immer "Inhalt B" ausgegeben, aber niemals
>> "Inhalt A" (falsche Reihenfolge der if-Abfragen) oder "Inhalt C"
>> (date('d.m.Y') ergibt niemals '24.12.'). Ändere die Reihenfolge der
>> if-Abfragen und verwende "else" an den richtigen Stellen. Dann klappt's
>> auch mit "Inhalt A" und "Inhalt C".
>

> .... ok das mit den Schleifen hab ich wohl noch nicht ganz verstanden.

Welche Schleifen? if-Anweisungen sind keine Schleifen.

Schleifen sind per definitionem Anweisungen oder Blöcke, die mehrmals
hintereinander durchlaufen werden.

> Wäre die Schleifenreihenfolge so richtig:
>
> if (($wochentag == 'Mi' && $uhrzeit >= '20:30' ||
> $wochentag == 'Fr' && $uhrzeit >= '20:00') && $uhrzeit < '22:00')
> $text = "Inhalt A";
>
> else
> {
>
> if ($datum == "24.12.")
> {
> $text = "Inhalt C";
> }
>
> else
>
> $text = "Inhalt B";
>
> }

Das wäre besser, aber immer noch nicht ganz richtig: Wenn der 24.12. auf
einen Mittwoch oder Freitag fällt und der Zeitpunkt des Aufrufs an
diesem Tag in die vorgegebenen Zeiten passt, bekämst Du auch an diesem
Tag "Inhalt A" ausgegeben.

Versuch's mal so:

if ($datum == "24.12.")
$text = "Inhalt C";

else if (($wochentag == 'Mi' && $uhrzeit >= '20:30' ||


$wochentag == 'Fr' && $uhrzeit >= '20:00') &&
$uhrzeit < '22:00')
$text = "Inhalt A";
else

$text = "Inhalt B";

> OK das mit dem Datum muß ich noch irgendwie rausfinden so das man das Jahr
> weglassen kann ...

$datum = date('d.m.');

Vielleicht schaust Du Dir einfach mal im Handbuch die Beschreibung zu
date() an, anstatt irgendwelche Beispiele abzutippen, die Du
offensichtlich nicht verstanden hast.

Gruß. Claus

Claus Reibenstein

unread,
Feb 6, 2010, 4:29:45 PM2/6/10
to
Sascha Blum schrieb:

> Claus Reibenstein wrote:
>
>> In diesem Fall kannst Du Dir $timestamp aber auch komplett schenken und
>> brauchst date() mit nur einem Argument aufzurufen.
>
> brauch ich dieses timestamp nicht für die Uhrzeit?

Nein.

Gruß. Claus

Sascha Blum

unread,
Feb 6, 2010, 4:34:48 PM2/6/10
to
Hallo,

Claus Reibenstein wrote:

>> Wäre die Schleifenreihenfolge so richtig:
>>
>> if (($wochentag == 'Mi' && $uhrzeit >= '20:30' ||
>> $wochentag == 'Fr' && $uhrzeit >= '20:00') && $uhrzeit < '22:00')
>> $text = "Inhalt A";
>>
>> else
>> {
>>
>> if ($datum == "24.12.")
>> {
>> $text = "Inhalt C";
>> }
>>
>> else
>>
>> $text = "Inhalt B";
>>
>> }
>
> Das wäre besser, aber immer noch nicht ganz richtig: Wenn der 24.12. auf
> einen Mittwoch oder Freitag fällt und der Zeitpunkt des Aufrufs an
> diesem Tag in die vorgegebenen Zeiten passt, bekämst Du auch an diesem
> Tag "Inhalt A" ausgegeben.

ahh ok nun hab ich verstanden worauf du hinaus wolltest und warum das so
dann falsch war ...


> Versuch's mal so:
>
> if ($datum == "24.12.")
> $text = "Inhalt C";
> else if (($wochentag == 'Mi' && $uhrzeit >= '20:30' ||
> $wochentag == 'Fr' && $uhrzeit >= '20:00') &&
> $uhrzeit < '22:00')
> $text = "Inhalt A";
> else
> $text = "Inhalt B";

vielen Dank, werde ich so mal testen.

Noch eine kurze Frage, ich könnte im Grunde das ja mit dem Datum auch
erweitern wenn ich das richtig sehe, dann müste ich das dann so machen wenn
ich die Abfragen in einer zusammenfassen möchte:


if ($datum == "01.05." && $datum == "24.12." && $datum == "31.12.")


$text = "Inhalt C";
else if (($wochentag == 'Mi' && $uhrzeit >= '20:30' ||
$wochentag == 'Fr' && $uhrzeit >= '20:00') &&
$uhrzeit < '22:00')
$text = "Inhalt A";
else
$text = "Inhalt B";

hab ich das so richtig verstanden? Also wenn eines der 3 genannten Datums da
zur Zeit der Abfrage gerade sind, das Inhalt C eben ausgegeben wird ...

Viele Grüße

Sascha

Sascha Blum

unread,
Feb 6, 2010, 4:42:09 PM2/6/10
to
Hallo,

Claus Reibenstein wrote:

ahh ok danke

... dann mach ich aus meinem ursprünglichen Code:

$timestamp = time();

$wochentage = array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");

$wochentag=$wochentage[date("w")];

$datum = date("d.m.Y",$timestamp);

$uhrzeit = date("H:i",$timestamp);


einfach diesen und ersetze das wie folgt:


$wochentage = array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");

$wochentag=$wochentage[date("w")];

$datum = date("d.m.Y");

$uhrzeit = date("H:i");

... dann müste das ja solangsam stimmen hoffe ich mal.

Viele Grüße

Sascha


Christoph Jeschke

unread,
Feb 6, 2010, 4:58:44 PM2/6/10
to
Sascha Blum schrieb:

> brauch ich dieses timestamp nicht für die Uhrzeit?

Ja. PHP ist aber so freundlich, das Ergebnis von time() zu verwenden,
wenn kein Timestamp übergeben wird. Siehe das Manual hierzu.

Gruß
Christoph

Claus Reibenstein

unread,
Feb 6, 2010, 5:01:35 PM2/6/10
to
Sascha Blum schrieb:

> Noch eine kurze Frage, ich könnte im Grunde das ja mit dem Datum auch
> erweitern wenn ich das richtig sehe, dann müste ich das dann so machen wenn
> ich die Abfragen in einer zusammenfassen möchte:
>
> if ($datum == "01.05." && $datum == "24.12." && $datum == "31.12.")

if ($datum == "01.05." || $datum == "24.12." || $datum == "31.12.")

Wenn Du mehrere Bedingungen mit && verknüpfst, müssen alle diese
Bedingungen erfüllt sein. Eine Variable kann aber niemals mehrere Werte
gleichzeitig annehmen.

Gruß. Claus

Claus Reibenstein

unread,
Feb 6, 2010, 5:02:45 PM2/6/10
to
Sascha Blum schrieb:

> $datum = date("d.m.Y");

^

Da steht ja immer noch das Jahr.

Gruß. Claus

Christoph Herrmann

unread,
Feb 8, 2010, 4:25:03 AM2/8/10
to
Sascha Blum schrieb:

> ... ok das mit den Schleifen hab ich wohl noch nicht ganz verstanden.
> Wäre die Schleifenreihenfolge so richtig:

Ich sehe nur Selektionen, keine Schleifen... Ich würde aber immer
Klammern setzen, auch wenn es nur eine Anweisung ist. Vor allem wenn es
nicht nur ein if ist sondern auch noch else Fälle dabei sind.

> if (($wochentag == 'Mi' && $uhrzeit >= '20:30' ||
> $wochentag == 'Fr' && $uhrzeit >= '20:00') && $uhrzeit < '22:00')
{
> $text = "Inhalt A";
}
> else
> {
>
> if ($datum == "24.12.")
> {
> $text = "Inhalt C";
> }
>
> else
{
> $text = "Inhalt B";
}
> }

Aber eigentlich sollte es nun passen, probier es doch einfach aus mit
ein paar Datumsangaben...

> OK das mit dem Datum muß ich noch irgendwie rausfinden so das man das Jahr
> weglassen kann ...

Wie wäre es damit einfach das ".Y" wegzulassen für das Jahr?
$datum = date("d.m");

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

0 new messages