PHP Zeit-Bedingung über Mitternachtsgrenze?

...komplette Frage anzeigen

3 Antworten

Warum so kompliziert wenn es auch einfach geht?
Hier die einfache Lösung ;)

<?php
$zeit = date("G");
if ($zeit >= 22 && $zeit < 8)
{
@copy($verzeichnis_off.$offline, $verzeichnis_root.$online);
}
?>

Gruß: Holger

Erklärung: Da Du volle Stunden nutzt, benötigst Du bei date nur den Parameter "G". date("G") gibt Dir die aktuelle Stunde (24 Stunden Format) ohne führende 0 aus, der Rest ist einfache Mathematik und Logik :)

kevni2012 01.07.2016, 02:17

Danke für den Hinweis und deine Erklärung. Leider kann ich nicht nur mit G arbeiten, da die Cam gerne mal ein paar Minuten abweicht und z.b. ggf. erst um 22.01 oder 03 hochläd, womit dann das letzte Bild unterschlagen wäre ;-) Also muss es wohl doch die komplizierte Variante sein...

0
TanteHolger 01.07.2016, 02:19
@kevni2012

Wie ist denn die Erfahrung mit dem Delay bis zur letzten Speicherung? Du könntest dann in die Rechnung eine Minute mit einbeziehen.

0
TanteHolger 01.07.2016, 02:38
@TanteHolger

Versuch dies, das sollte klappen =) Edit: Klammern vergessen.

<?php
function cpvan()
{
$stunde = date("G");
$minute = date("i");
if ($stunde >= 22 && $stunde < 8)
{
if ($stunde == 22 && $minute < 10)
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}

if (cpvan())
{
@copy($verzeichnis_off.$offline, $verzeichnis_root.$online);
}
?>
0

Also keine Ahnung ob es daran lag, dass ich mir gerade ein Bier genommen hab, aber es läuft dann jetzt :D Hatte mir die ganze Zeit darüber Gedanken gemacht warum er ein Problem mit der Datumsgrenze, bzw. mit der Mitternachtsstunde hat - na und irgendwie hatte ich im Kopf "Vielleicht sind vier Nullen ja eine zufiel?" :P

Habe die Zeitausgabe jetzt mal ohne nullführende Stunden eingestellt und siehe da - es funktioniert (siehe Code).

Trotzdem wäre es immer noch hilfreich zu wissen

1. warum das Skript Probleme mit Mitternacht hat, wenn es 0000 sind und

2. warum sich das nur mit elseif lösen lässt?! Denn trotz der Umstellung auf >=2200 und <=800 hat er Probleme -.-

//zeit
$uhrzeit = date("Gis");
//oflineschalte
if (($uhrzeit >= 220500) && ($uhrzeit <= 235959)) {
@copy($verzeichnis_off.$offline, $verzeichnis_root.$online);
}
elseif (($uhrzeit >= 00001) && ($uhrzeit <= 80000)) {
@copy($verzeichnis_off.$offline, $verzeichnis_root.$online);
}
Malemeister 01.07.2016, 16:23

Hallo,

das Skript hat keine Probleme mit Mitternacht. Du solltest dir deine beiden Codes nur nochmal genau ansehen, dann findest du von alleine den Fehler.

Zu deinem elseif: Das lässt sich auch nur mit 2 If Abfragen lösen. Ein elseif musst du hier nicht verwenden.

Zu deinem restlichen Code:

1. Bei deinen If Abfragen (Expressions) kannst du die Klammern, welche den Vergleich der Zahlen umklammer, weglassen. Dann wird dein Code auch leserlicher.

2. Mach das @ vor copy weg und behebe die Warnung welche dir rausgeschmissen wird! Du solltest nie mit @ arbeiten. Es hat ja schon ein Sinn warum eine Warnung oder, schlimmer noch, eine Fehlermeldung rausgeschmissen wird!

Grüße

0
macmad 06.07.2016, 00:50

Zahlen, die in PHP mit 0 beginnen, werden nicht als Dezimalzahlen interpretiert sondern als Oktalzahlen. Das Oktalsystem kennt nur Ziffern von 0 bis 7. Da 0800 eine 8 enthält, wirft PHP einen Fehler. Falls dir dieser Fehler nicht angezeigt wurde, solltest du die Anzeige von Fehlern aktivieren.

0
macmad 06.07.2016, 01:18
@macmad

Ergänzung: Erst ab PHP 7 wird in diesem Fall ein Fehler geworfen. In früheren Versionen wird 0800 zu 0 ausgewertet und das Script läuft normal weiter.

0

Als erstes solltest du überhaupt feststellen, ob der Fehler in der Abfrage oder in dem Script liegt - mit ganz einfachen echo-Befehlen lässt es sich einfach feststellen. Falls schon die Abfrage nicht klappen sollte (was ich nicht glaube), dann solltest du dir auch noch ein echo $uhrzeit einbauen.

PS: was passiert um genau 0 Uhr? Also bei $uhrzeit == 0000? ;)

kevni2012 01.07.2016, 01:40

Habe kein Echo drin, aber schau dir mal meinen Nachtrag an. Mittlerweile klappt es, nur mit einem Manko. Das ist zu verkraften, aber ich würde trotzdem gerne wissen wo das Problem liegt :)

0
CrEdo85wiederDa 01.07.2016, 01:45

Man kann die zwei Bedingungen nicht miteinander zusammenfassen, da der Script ja nicht weiß, dass in deinem Verständnis z.B. 0001 größer ist als 2359.

1
CrEdo85wiederDa 01.07.2016, 01:49

An für sich wäre aber die Lösung ganz einfach: kehre den Script um. Lasse per Default die Offline-Grafik anzeigen und überschreibe diese in der Zeit zwischen 0800 und 2200 mit dem Online-Bild. oder ohne den Script umzukehren: if (8 bis 22) {nix} else {script}

2

Was möchtest Du wissen?