PHP If, Elseif Problem, Script tuts nicht!

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Hallo

Warum funktioniert das nicht?

Ich möchte zwischen 7 uhr Morgens und 18h Nachmittags Bild1 laden.
Dann zwischen 18h Nachmittags und 23h Abends Bild2.
Und dann zwischen 23h Abends und 7h Morgens Bild3.
Nur irgendwie klappt das nicht, z.B. wird gerade "nach 23Uhr" nichts geladen, sollte
doch aber da ab 23Uhr was angegeben ist, was mache ich falsch?


PHP:
if (date('H') >= '07' && date('H') < '18') { 
echo '(Html) Bild1 von 7h bis 18h';
}

else if (date('H') >= '18' && date('H') < '23') {
echo '(Html) Bild2 von 18h bis 23h';
}

else if (date('H') >= '23' && date('H') < '07') {
echo '(Html) Bild3 von 23h bis 7h';
}

Danke!

Belee
 
Hmm...wie sonst soll ich das zwischen 23 und 7 machen? noch ein elseif bis 24 und dann ab 24 bis 7?
Ich stehe jetzt komplett im Regen - bis zum Hals :D
 
Hi,

wie KeepXtreme bereits sagte, mach doch aus dem letzten elseif ein else, du hast doch dann eh genau den Zeitraum zwischen 23 Uhr und 7 Uhr abgedeckt mit dem else-Teil.

Gruß,

Mathias
 
Hallo,
habe sowas auch mal in J gemacht, dürfte in PHP aber genauso aussehen:

Code:
	if(stunde >= 5 && stunde < 12)
	{
		document.getElementById("grusst").innerHTML = "Guten Morgen, " + text;
	}
	else if(stunde >= 12 && stunde < 18)
	{
		document.getElementById("grusst").innerHTML = "Guten Tag, " + text;
	}
	else if(stunde >= 18 && stunde < 23)
	{
		document.getElementById("grusst").innerHTML = "Guten Abend, " + text;
	}
	else if(stunde >= 23 && stunde < 5)
	{
		document.getElementById("grusst").innerHTML = "Eine gute Nacht, " + text;
	}

Was mir auffällt, weiß aber nicht ob das bei PHP zum Fehler führt, ist das du Strings vergleichst und keine Zahlen.

Also x >= 7 ist ncht das gleiche wie x >= '7'.. wenn ich mich nicht irre.

Gruß

HD
 
Du hast da aber doch genau dasselbe Problem, HansDampf.

stunde >= 23 && stunde < 5 ist nicht möglich.
 
stunde >= 23 und stunde < 7 ist zuerst einmal eine Kontradiktion (und damit unerfüllbar). Wer solche Ausdrücke konstruiert, darf sich dann nicht wundern, dass diese Bedingungen nie eintreffen.

Jetzt existieren zur Lösung Deines Problems 3 Möglichkeiten - 2 wurden schon genannt (else oder letzte Bedingung mit OR)

3. Möglichkeit:
Da die Uhrzeit eine periodische Größe ist, kann man mit Restklassen arbeiten.

Der Ausdruck 'stunde >= 23 und stunde < 7' wird erfüllbar, wenn man auf den 2. Term auf beide Operanden 24 aufaddiert, sodass

'stunde >= 23 und (stunde+24 < 7+24)'

Die Stundenzahl ist eine Restklasse Modulo 24.
 
Zuletzt bearbeitet:
OR arbeitet hier zwar korrekt, aber nur, weil alle anderen Bedingungen zuvor falsch waren. Somit sollte man einfach else nutzen.

>= 23 OR < 7 trifft ja im letzten Fall sowieso auf alles zu, was noch kommen könnte.
 
Zurück
Oben