Tageszeit nach Uhrzeit

DarkRaver

Erfahrenes Mitglied
Hallo!
Ich möchte gerne die Besucher per Uhrzeit ansprechen.
Das mache ich mit folgendem Code:
PHP:
$uhrzeit = date('H');
if($uhrzeit >= 4 && $uhrzeit <= 11) { $tageszeitanrede = "Schönen Guten Morgen"; }
if($uhrzeit >= 11 && $uhrzeit <= 17) { $tageszeitanrede = "Guten Tag"; }
if($uhrzeit >= 17 && $uhrzeit <= 22) { $tageszeitanrede = "Guten Abend"; }
if($uhrzeit >= 22 && $uhrzeit <= 4) { $tageszeitanrede = "Gute Nacht"; }
else { $tageszeitanrede = "Hallo"; }
Warum schmeißt er mir jetzt um diese Uhrzeit(23:40) einfach nur das Hallo raus?
Ich möchte von 5-12 Uhr "Schönen Guten Morgen", von 12-18 Uhr "Guten Tag", von 18-22 Uhr "Guten Abend" und von 22-5 Uhr "Gute Nacht" ausgegeben haben.
Ich hoffe ihr könnt mir helfen, weil ich nicht mehr weiter weiß.

Mfg
 
Das liegt wahrscheinlich daran das Deine If Anfrage so nicht ganz funktioniert und zwar deshalb
weil Du in dieser Zeile hier:
PHP:
 if($uhrzeit >= 22 && $uhrzeit <= 4) { $tageszeitanrede = "Gute Nacht"; }

prüfst ob die Uhrzeit, nehmen wir mal an es ist 23:40Uhr, Größer als oder gleich 22 ist,
was ja bei der Zahl 23 der Fall wäre dann aber weiter abfragst ob 23 auch kleiner 4 ist
und diese Abfrage ist eben nicht wahr weil php ja nicht weiß das Du mit Deiner Variable
$Uhrzeit auch tatsächlich die Uhrzeit meinst. Also kommt bei einer Uhrzeit von 23:40
keine Variablenzuweisung zustande und deswegen wird dann die "else" Anweisung
ausgeführt.

Ich hoffe ich konnte Dir damit ein klein wenig weiterhelfen :)
 
Zuletzt bearbeitet:
Oder um es mal richtig formuliert aufzuschreiben:
PHP:
$uhrzeit = date('H');

if($uhrzeit >= 4 && $uhrzeit <= 11)
  $tageszeitanrede = 'Schönen Guten Morgen';
elseif($uhrzeit >= 11 && $uhrzeit <= 17)
  $tageszeitanrede = 'Guten Tag';
elseif($uhrzeit >= 17 && $uhrzeit <= 22)
  $tageszeitanrede = 'Guten Abend';
elseif($uhrzeit >= 22 && $uhrzeit <= 4)
  $tageszeitanrede = 'Gute Nacht';
else
  $tageszeitanrede = 'Hallo';

PS: In meiner Variante, welche auf dem basiert, was du eigentlich haben wolltest, würde die Variable $tageszeitanrede niemals den Wert Hallo haben.
 
Zuletzt bearbeitet:
So könnte man es zum Beispiel machen dann funktioniert es, aber wie immer bei meinem Code
gillt, es ist nicht schön aber es funktioniert:
PHP:
$uhrzeit = date('H'); 

if      ($uhrzeit >= 4 && $uhrzeit <= 11)
        $tageszeitanrede = "Schönen Guten Morgen";
elseif  ($uhrzeit >= 11 && $uhrzeit <= 17)
        $tageszeitanrede = "Guten Tag";
elseif  ($uhrzeit >= 11 && $uhrzeit <= 17)
        $tageszeitanrede = "Guten Tag";
elseif  ($uhrzeit >= 17 && $uhrzeit <= 22)
        $tageszeitanrede = "Guten Abend";
elseif  ($uhrzeit >= 22 || $uhrzeit <= 4)
        $tageszeitanrede = "Gute Nacht";

else    $tageszeitanrede = "Hallo";
 
Zuletzt bearbeitet:
Da mir persönlich solche if elseif elseif- Statements nicht zusagen und ich Fan von Arrays bin, in denen man die Definitionen schön zusammenfassen kann, hier mal 2 Lösungen mittels Array

PHP:
$tageszeitanreden = array(
     0 => 'Gute Nacht',
     4 => 'Schönen Guten Morgen',
    11 => 'Guten Tag',
    17 => 'Guten Abend',
    22 => 'Gute Nacht');

$uhrzeit = date('G');
foreach($tageszeitanreden as $stunde => $text){
    if($stunde > $uhrzeit) break;
    $tageszeitanrede = $text;
}   
echo $tageszeitanrede;

Und nun noch eine Lösung vfür leute die lieber mit Array-Funktionen arbeiten
PHP:
$tageszeitanreden = array(
     0 => 'Gute Nacht',
     4 => 'Schönen Guten Morgen',
    11 => 'Guten Tag',
    17 => 'Guten Abend',
    22 => 'Gute Nacht');

$uhrzeit = date('G');
$tageszeitanrede = $tageszeitanreden[
                        array_pop(
                            array_filter(
                                array_keys($tageszeitanreden), 
                                create_function('$stunde', "return (\$stunde <= {$uhrzeit}); ")
                            )
                        )
                    ];
echo $tageszeitanrede;
 
@yaslaw, finde ich sehr schön die Lösung mit dem Array, da ich diese Form von Arrays bislang jedoch
noch so gut wie gar nicht eingesetzt habe habe ich bei Deinem Beispiel ein Paar Probleme das ganze
zu verstehen vielleicht kannst Du mir da noch mal auf die Sprünge helfen?

Ich verstehe hier nicht ganz wie die if Abfrage funktioniert *Das macht mich gerade ganz kirre*

So wie ich das sehe durchläuft die foreach schleife das Array und überprüft den Arrayindex ($stunde)
jeweils ob er kleiner ist als die ermittelte Uhrzeit, wenn dies der Fall ist wird die Schleifenabfrage abgebrochen und der bis dahin ausgelesene wert in die variable $tageszeitandrede übergeben die dann
ausgegeben wird.

Ich versteh aber nicht wie dieser Vergleich: if Arrayindex > Uhrzeit funktioniert? Ich meine es ist
offensichtlich das es funktioniert aber ich weiß einfach nicht warum das ist wie voodoomagic hilfe
kann mir das mal jemand für dummies erklären?
 
Du hast soweit richtig geseehn. Der Index des Arrays ist 'Gültig ab'. Das Ende der Gültigkeit ist der nächste Index.

Nun gehe ich den Array von Anfang an durch und vergleiche immer den Index ($stunde) mit der aktuellen Uhrzeit ($uhrzeit).
Ist die $uhrzeit grösser oder gleich dem Index (stunde) des arrays, gehts einfach weiter und ich setze die entsprechende Begrüssungsformal in die Variable $tageszeitanrede.
Dies geht so weiter und $tageszeitanrede wird jedesmal überschrieben. Wenn dann aber der Index grösser als die aktuelle Stunde ($uhrzeit) ist, so verlasse ich die Schleife und der letzte Spruch ist immer noch in $tageszeitanrede.

Ist $uhrzeit grösser als der letzte Index, gehts mit dem letzten Wert aus der Schleife
 
Ah, danke ich glaube solangsam aber sicher steig ich da durch, benötigt wohl noch einige Übung
bis ich mich damit auch vertraut fühle und das ganze sicher in meinem code einsetzen kann.

Danke für die Gedankenstütze!
 
Zurück