====== Überprüfung von Öffnungszeiten mit PHP ====== Mit dieser Funktion kann überprüft werden, ob z. B. ein Ladengeschäft aktuell geöffnet hat. ==== Beispiel-Öffnungszeiten ==== ^ Wochentag ^ Uhrzeit von ^ Uhrzeit bis ^ | Montag | 08:00 Uhr | 12:00 Uhr | | Montag | 14:00 Uhr | 18:00 Uhr | | Dienstag | 08:00 Uhr | 12:00 Uhr | | Dienstag | 14:00 Uhr | 18:00 Uhr | | Mittwoch | 08:00 Uhr | 12:00 Uhr | | Donnerstag | 08:00 Uhr | 12:00 Uhr | | Donnerstag | 14:00 Uhr | 18:00 Uhr | | Freitag | 08:00 Uhr | 12:00 Uhr | | Samstag | 08:00 Uhr | 13:00 Uhr | ==== Definierung der Öffnungszeiten ==== Durch die Verwendung der Dezimal-Werte für die Wochentage können die Werte der komplexen Tabelle oben in PHP sehr vereinfacht abgebildet werden. [[php:bitweise|Hier finden Sie eine Erklärung der Zusammensetzung der Dezimal-Werte]]. $zeiten = [ 0 => [ 'wochentage' => 62, 'uhrzeit_von' => '08:00', 'uhrzeit_bis' => '12:00' ], 1 => [ 'wochentage' => 22, 'uhrzeit_von' => '14:00', 'uhrzeit_bis' => '18:00' ], 2 => [ 'wochentage' => 64, 'uhrzeit_von' => '08:00', 'uhrzeit_bis' => '13:00' ] ]; ==== PHP-Funktion "isOpen" ==== /** * @param array $zeiten * @return bool */ function isOpen( array $zeiten ) { $today = date( "w" ); // heutiger Wochentag (0 bis 7) $value = pow( 2, $today ); // Potzenzwert des heutigen Wochentags foreach( $zeiten as $zeit ) { if( $value & $zeit['wochentage'] ) // nur, wenn der Potzenwert in den Wochtentagen enthalten ist { $von = explode( ':', $zeit['uhrzeit_von'] ); $start = mktime( $von[0], $von[1] ); $bis = explode( ':', $zeit['uhrzeit_bis'] ); $end = mktime( $bis[0], $bis[1] ); if( time() >= $start && time() <= $end ) { return true; } } } return false; } ==== Funktionsaufruf ==== if( isOpen( $zeiten ) ) { echo "jetzt geöffnet"; } else { echo "jetzt geschlossen"; }