Aktuelle Zeit überprüfen ob sie in einen Festgelegten Zeitraum liegt

Hallo,

würde gerne in einem Script eine Bedingung einfügen welche an jedem Tag zwischen zwei bestimmten Zeiten erfüllt sein soll.

Bsp: zwichen 12:00Uhr und 13:00Uhr ist Mittagspause. Wenn das Script nun in dieser Zeit ausgeführt wird, soll es z.B. ich habe Hunger ausgeben.

Irgendwie bin ich momentan zu blöd das ganze in php zu lösen. Sitze seit beinahe zwei Stunden darüber… Für ein par kleine Idden wäre ich sehr dankbar.

Gruß
Ralf

Scripttimer jede Minute (oder Intervall je nach Bedarf) und dann einfach immer die aktuelle Zeit mit der Bedingung prüfen (Stichwort strtotime).
Viel Erfolg. :slight_smile:

$time = date("H:i");
if(($time >= "12:00") && ($time <= "13:00"))
{
   //mach was
}

so in etwa…

$time = date("H:i");  //aktuelle zeit
$Mittag_ab = "13:00"; 
$Mittag_bis ="14:00";

if (($time >= $mittag_ab) && ($time <= $mittag_bis))
  $pause = true;
else
  $pause = false;

Dann bring ich meinen auch noch:


if (time() >= strtotime("12:00") && time() <= strtotime("13:00")) {
     //mach was
}

:smiley:

das spuckt dann gleich eine Fehlermeldung aus, da die Variablen unbekannt sind. :wink:

Super, Danke…

php ist einfach zu simple…

Ich bin eher der c / c++ Mensch und da kann man formatierte Strings eben nicht so einfach vergleichen. Daran muss ich mich wohl erst gewöhnen.

echo date('H') == 12 ? 'Ich hab Hunger!' : 'Gibt nix zu Essen!';

Und ich Idiot rechne bisher die beiden Zeitpunkte immer vorher noch in Unixtime um, um reine Integerwerte vergleichen zu können :rolleyes:. Manchmal einfach nur Wald <-> Bäume Prinzip!

Ihr kürzt euch noch den Kopf weg…:smiley:

Aber die Variante von Horst ist absolut interessant… muss ich mal testen… der Hammer;)

Hallo zusammen,

mit Anregung der vorangegangenen Posts habe ich folgendes Script erstellt. Ist für einen automatischen Türöffner der allerdings in der Sperrzeit nicht schalten soll.

Obwohl alle Bedingungen für die IF Abfrage erfüllt sind, schaltet das Teil nicht. Sehe ich den Wald nicht?

<?
echo "=============================================================================
";
echo "===== UG Kellertür öffnen  ==================================================
";
echo "=============================================================================
";

 // Trigger einschalten über den BMI UG Treppenhaus bei Variablenänderung
 
 //Fuer Testzwecke koennen Debugausgaben aktiviert werden
 // Debug-Modus an=true / aus=false
 $debug = true;

  // Variablen
 $time = date("H:i");
 $SperrzeitVon = "22:00";
 $SperrzeitBis = "07:45";

 $UgTuerSoftSwitch = GetValue(48725 /*[31 UG Türsteuerung\UG Tür]*/  );
 // $TuerSchalterUG = GetValue(46869 /*[05 LCN\LCN Binäreingänge\B5B7 UG Tür\B5B7 UG Tür]*/  );
 $BmiUgFlur = GetValue(56690 /*[05 LCN\LCN BMIs\M201 UG Kellertür BMI5\M201 UG Kellertür BMI5 Status]*/ );
 $BmiEUgTreppe = GetValue(27206 /*[05 LCN\LCN BMIs\M11 EGUG Treppenhaus BMI5\M11 EGUG Treppenhaus BMI5 Status]*/ );
 
if($debug) {echo " 
";}
if($debug) {echo "time: $time 
";}
if($debug) {echo "SperrzeitVon:  $SperrzeitVon 
";}
if($debug) {echo "SperrzeitBis:  $SperrzeitBis 
";}
if($debug) {echo "UgTuerSoftSwitch:  $UgTuerSoftSwitch 
";}

if(($time >= $SperrzeitBis) && ($time <= $SperrzeitVon) && ($UgTuerSoftSwitch = 0))

 	{
	 	// 1. Tür öffnen
	if($debug) {echo "If erfüllt! 
";}
	LCN_SwitchRelay(25703 /*[05 LCN\LCN Relais real\R75S Kellertür]*/ ,true); //Tür öffnen
	}
else
if($debug) {echo "Else erfüllt! 
";}
?>

Anbei noch der Output des Scriptes:

=============================================================================
===== UG Kellertür öffnen ==================================================

time: 16:46
SperrzeitVon: 22:00
SperrzeitBis: 07:45
UgTuerSoftSwitch: 0
Else erfüllt!

Gr, Stromer

if(($time >= $SperrzeitBis) || ($time <= $SperrzeitVon) && ($UgTuerSoftSwitch = 0)) 

Hallo Rainer,

vielen Dank. || ist oder? Obwohl doch beide Bedingungen erfüllt sind?

Danke Stromer

|| ist oder, richtig. Du hast eine Tagesübergreifende Abfrage. So etwas macht man am besten mit mktime…
Setz mal deine Zeit gedanklich um.

Hallo,
zufällig hab ich mir gestern auch etwas für diesen Zweck fertig gemacht, da ich so einen Zeitvergleich auch an verschiedenen Stellen mal nutze. Herausgekommen ist folgendes.

Einmal der Zeitvergleich an sich, den ich per ‚include‘ an verschiedenen Stellen nutze:

<?
function zeitprüfung ($einschaltzeiten){
	$tag=(date("l")); $Stunde=(date("H")); $Minute=(date("i"));
	$ist=mktime($Stunde, $Minute,0,0,0,0);
	$count = count($einschaltzeiten);$i=0;
	while ($i < $count) {
  		if (($einschaltzeiten[$i][0] == $tag)) {
			$vh=substr($einschaltzeiten[$i][1],0,2); $vm=substr($einschaltzeiten[$i][1],3,2);
			$bh=substr($einschaltzeiten[$i][2],0,2); $bm=substr($einschaltzeiten[$i][2],3,2);
			$von=mktime($vh,$vm,0,0,0,0); $bis=mktime($bh,$bm,0,0,0,0);
	      if (($von<=$ist)&&($bis>=$ist)){
	         return true;
	         }
			}
		$i++;
		}
	return false;
	}
?>

Und in den Scripten erstelle ich dann eine Tabelle mit den gültigen Zeiten und rufe das dann entsprechen ab. So kann ich auch eine oder mehrere Zeitfenster pro Wochentag eingeben.
Fällt die Zeit in einen güligen Zeitraum, wird die Variable ‚$power‘ ‚true‘, andernfalls ‚false‘. Beispiel:

<?

$einschaltzeiten =array(//Wochentag (Englisch), von (xx:xx), bis (xx:xx)
	array("Saturday","06:50","12:59"),
	array("Saturday","13:20","16:27"),
	array("Sunday","08:30","21:59"),
	array("Monday","08:30","21:59"),
	array("Tuesday","07:50","22:59"),
	array("Wednesday","07:50","22:59"),
	array("Thursday","07:50","22:59"),
	array("Friday","07:50","22:59")
);

include("Zeitpruefung");
$power=zeitprüfung($einschaltzeiten);//true/false

if ($power)	echo "
Aktuelle Zeit liegt im gesuchten Zeitrahmen.";
else echo "
Aktuelle Zeit liegt nicht im gesuchten Zeitrahmen.";

?>

Damit das gnaze funktioniert, einfach das obere Script mit dem Namen ‚Zeitpruefung‘ abspeichern.
Vielleicht kann ja einer was damit anfangen.

Gruß
Smudo

Hallo Stromer,

da muß auf jeden Fall ein doppeltes „=“ hin ($UgTuerSoftSwitch = 0).

if(($time >= $SperrzeitBis) && ($time <= $SperrzeitVon) && ($UgTuerSoftSwitch = 0))

Gruß

Hi Attain,

das habe ich bereits geändert, aber er reagiert nicht darauf, das Softswitch wird ignoriert. Kann da mit der Syntax noch was im argen liegen?

Gr, und Danke für Eure Hilfe, Stromer

Wenn ich dich jetzt richtig verstanden habe, willst Du so etwas haben ?

$time = "05:15";
$set = 0;
if(($set == 0) && ($time >= "22:00") || ($set == 0) && ($time <= "07:45")) 
{
    echo "Tür gesperrt.
";
}
else echo "Tür öffnen";

Nur eine Idee:

Was ist den $UgTuerSoftSwitch und was soll es bewirken? Musst Du das für Deine Wunschlogik ggf. mit einem „!“ negieren (Dein Beitrag #11 deutet in diese Richtung)??

Grüße, Benjamin

Hallo bengie,

ich habe hier zwei Bewegungsmelder die einen elektrischen Türöffner der Kellertür betätigen. Da das Ding auch Geräusche macht, möchte ich ihn in der Sperrzeit automatisch deaktivieren oder die Tür eben per Webfront generell öffnen (wenn gerade viel gelaufen wird…)

Der Softswitch im Webfront schaltet eine Int Variable mit Automatik an, aus und Tür offen.

Gr, Stromer

PS: Danke Rainer für Deine neune Ideen. Bin gerade am umsetzen.