Hallo,


Deze switch heb ik gemaakt voor de tekst terug te geven of de telefoonlijnen open of gesloten zijn.
De switch zorgt voor de dagen en het if else statement voor het uur waarin de tekst veranderd.


<?php
function phone_schedule(){
date_default_timezone_set('Europe/Amsterdam');

define('CUTOFFTIJDB', 12);
define('CUTOFFTIJDE', 13);
$weekdagphone = (int) date('w');
$uur = (int) date('G');



switch ($weekdagphone) {
	case 6:  // zaterdag
    		if ($uur > CUTOFFTIJDB && $uur < CUTOFFTIJDE ) {
    			$phoneline = 'Lijnen zijn open';	   
    		} else {
   			$phoneline = 'Lijnen zijn gesloten';
    		}
	break;

    	case 0:  // zondag
    			$phoneline = 'Lijnen zijn gesloten';      
	break;

    	case 1:  // maandag
            		$phoneline = 'Lijnen zijn gesloten';  
	break;

    	case 2:  // dinsdag
		if ($uur > CUTOFFTIJDB && $uur < CUTOFFTIJDE ) {
    			$phoneline = 'Lijnen zijn open';	   
    		} else {
   			$phoneline = 'Lijnen zijn gesloten';
    		}
	break;

    	case 3:  // woensdag
		if ($uur > CUTOFFTIJDB && $uur < CUTOFFTIJDE ) {
    			$phoneline = 'Lijnen zijn open';	   
    		} else {
   			$phoneline = 'Lijnen zijn gesloten';
    		}
       break;

    	case 4:  // donderdag
		if ($uur > CUTOFFTIJDB && $uur < CUTOFFTIJDE ) {
    			$phoneline = 'Lijnen zijn open';	   
    		} else {
   			$phoneline = 'Lijnen zijn gesloten';
    		}
       break;

    	case 5:  // vrijdag
        	if ($uur > CUTOFFTIJDB && $uur < CUTOFFTIJDE ) {
    			$phoneline = 'Lijnen zijn open';	   
    		} else {
   			$phoneline = 'Lijnen zijn gesloten';
    		}
       break;
}

return array('phoneline' => $phoneline);
}
?>


Commentaar heb ik er even in het Nederlands bijgezet.

Nu blijf ik steeds terugkrijgen "lijnen zijn gesloten", terwijl de waarde tussen 12 en 13 ligt toch?
De vergelijkingen zijn altijd FALSE.

Als het 12 uur is, is het NIET groter dan tijd B en WEL kleiner dan tijd E = FALSE
Als het 13 uur is, is het NIET kleiner dan tijd E en WEL groter dan tijd B = FALSE

Probeer >= en <=

[size=xsmall]Toevoeging op 23/10/2018 13:05:12:[/size]

Mag het ook korter?

<?php
	$phoneline = 'Lijnen zijn gesloten';
	if ( $weekdagphone >= 2 ) {
		if ( $uur >= CUTOFFTIJDB && $uur <= CUTOFFTIJDE ) {
			$phoneline = 'Lijnen zijn open';       
		}
	}
?>
Bovenstaande code werkt niet helemaal naar behoren waarschijnlijk? Dit geeft tot en met 13:59:59 nog steeds "Lijnen zijn open".

Misschien is het ook handig om met een "half open domein" te werken, dus een van-en-met tot-en-zonder: [begin, eind>. En omdat begin- en einduur achter elkaar vallen zou je ook simpelweg met CUTOFFTIJDB kunnen vergelijken?

En wellicht nog wat intuïtiever: schrijf het in de volgorde zoals het in de tijdlijn valt, zodat alle groter dan / kleiner dan tekens dezelfde kant op wijzen:
<?php
if (CUTOFFTIJDB <= $uur && $uur < CUTOFFTIJDE) {
    // ...
}
?>

Of simpeler als CUTOFFTIJDB en CUTOFFTIJDE toch maar één uur verschillen:
<?php
if (CUTOFFTIJDB == $uur) {
    // ...
}
?>

Reageren