Ergebnis 1 bis 3 von 3

Thema: Eine simple php-Funktion zum Thema Öffnungszeiten

  1. #1
    Contao-Nutzer
    Registriert seit
    15.09.2016.
    Ort
    Eifel
    Beiträge
    31

    Standard Eine simple php-Funktion zum Thema Öffnungszeiten

    Hallo zusammen,

    weiß jetzt nicht ob das hier richtig ist und erwünscht ist, aber ich hatte mir vorgenommen hier nicht nur doofe Fragen zu stellen, sondern auch etwas zur Verfügung zu stellen wenn es möglich ist.
    Ich habe hier ein kleines sehr simples php-Script geschrieben zum Thema ob ein Geschäft, für das man eine Website erstellt, gerade geöffnet hat oder nicht. Es bezieht sich in dem Fall auf die Feiertage in Niedersachsen, aber kann natürlich beliebig erweitert werden. Das Script ist eine Mischung aus Sachen, die ich im Netz gefunden habe und eigenem Code.

    Code:
    <?php
    function oeffnungszeiten()
    {
        // Wochentage (Montag = 1, Dienstag = 2, ... Sonntag = 7)
        $close = array(7);
    
        // Offen ab
        $time_start = '10:00';
    
        // Offen bis
        $time_stop = '19:00';
    
        // Samstag andere Schließzeit
        if (date('N')==6)
            $time_stop = '17:15';
    
        // Feste Feiertage
        $holiday = array('01.01','01.05','03.10','25.12','26.12');
    
        // Bewegliche Feiertage
        $intJahr = date("Y");
        $intMon  = date("m");
        $intTag  = date("d");
        $feiertag ="keiner";
        $EasterSonday = easter_date($intJahr);
        if ( ($intTag == date("j", ($EasterSonday - 2*86400))) && ($intMonat == date("n", ($EasterSonday - 2*86400))) )
        {
              $feiertag="Karfreitag";
        }
        if ( ($intTag == date("j", ($EasterSonday + 86400))) && ($intMonat == date("n", ($EasterSonday + 86400))) )
        {
              $feiertag="Ostermontag";
        }
        if ( ($intTag == date("j", ($EasterSonday + 39*86400)))  && ($intMonat == date("n", ($EasterSonday + 39*86400))) )
        {
              $feiertag="Christi Himmelfahrt";
        }
        if ( ($intTag == date( "j", ($EasterSonday + 50*86400))) && ($intMonat == date( "n", ($EasterSonday + 50*86400))) )
        {
              $feiertag="Pfingstmontag";
        }
    
        // Prüfen ob geöffnet ist [ WOCHENTAG | UHRZEIT | FEIERTAG ]
        // Wenn ja ...
    
        if (date('N') != in_array(date('N'), $close) && date('H:i') >= $time_start && date('H:i') <= $time_stop && date('d.m') != in_array(date('d.m'), $holiday))
        {
    	    // Ausgabe OFFEN
        	$offen="Unser Geschäft ist noch bis ".$time_stop." f&uuml;r Sie ge&ouml;ffnet!";
        }
    
        // Wenn nein ...
        else
        {
        	if (date('d.m') == in_array(date('d.m'), $holiday))
        	{
        		if (date("d.m")=="01.01")
        			$feiertag="Neujahr";
        		if (date("d.m")=="01.05")
        			$feiertag="Tag der Arbeit";
        		if (date("d.m")=="03.10")
        			$feiertag="Tag der Deutschen Einheit";
        		if (date("d.m")=="25.12")
        			$feiertag="1. Weihnachtstag";
        		if (date("d.m")=="26.12")
        			$feiertag="2. Weihnachtstag";
        	}
        	else {}
    
        	if ($feiertag != "keiner")
        		$offen="Zur Zeit ist unser Geschäft wegen dem Feiertag ".$feiertag." geschlossen.";
        	else
        	    $offen="Zur Zeit ist unser Geschäft geschlossen.";
        }
        return($offen);
    }
    
    $offen = oeffnungszeiten();
    echo $offen;
    ?>
    Das Ganze dann einfach als "oeffnungszeiten.php" oder wie auch immer benannt im template-Ordner von Contao speichern und über
    Code:
    {{file::oeffnungszeiten.php}}
    einbinden.

  2. #2
    Contao-Fan
    Registriert seit
    10.11.2010.
    Beiträge
    471

    Standard

    Vielen Dank @oliver_z,

    es funktioniert allerdings nicht richtig. Z.B. am heutigen Ostermontag wird kein Feiertag ausgelöst.

  3. #3
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Das Skript hat zwei Fehler:

    1. Die Verwendung von easter_date() ergibt das falsche Datum für den Ostersonntag, da direkt mit dem Timestamp (UTC) gerechnet wird. Die Korrektur zu lokaler Zeit (aktuell UTC + 2 Stunden) fehlt.
    2. In den Prüfungen wird $intMonat verwendet. Gesetzt wird weiter oben aber $intMon



    Edit: 1. sollte eigentlich egal sein, wenn alle weiteren Berechnungen auch in UTC geschehen, da der Zeitversatz sich dann "rauskürzt". Ist es aber nicht, denn ich rufe das Skript höchstwahrscheinlcih nicht um 00:00 Uhr auf.
    Geändert von fiedsch (22.04.2019 um 08:12 Uhr)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •