PHP Wenn Tag x und Zeit xx dann das machen...

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Hallo Leute, ich benötige mal wieder etwas Hilfe von euch, ich sage jetzt schon mal danke.

Ich benötige eine Zeile in PHP die folgende Funktion hat...

z.B.

Wenn "dieser Wochentag" und "diese Uhrzeit" dann führen
das aus...

Ich habe mal was probiert aber irgendwie will nicht...

PHP:
define('UHRZEIT', date('H:i'));
define('TAG', date("w",time( )));
 
 
if (TAG == '5' AND UHRZEIT >= '11:00' && UHRZEIT <= '12:00') {
 
echo "passt, hier soll was gemacht werden";
}
 
elseif (UHRZEIT >= '12:00' && UHRZEIT <= '13:00') {
echo "passt nicht soll erst zur passenden zeit gemahct werden";
}
//es soll von 0 bis 24uhr abgefragt werden weil zu jeder Stunde was anderes gemacht werden soll
 
else
{
echo "anderer Tag, was ganz anderes";
}
//wenn es nicht freitag ist dann für die anderen Tage "global" was anderes machen

Was mache ich falsch? alles oder? :)
 
Zuletzt bearbeitet:
Also im ersten if macht das OR halt mal überhaupt keinen Sinn...
Außerdem kann man solche Abfragen notfalls halt auf mehrere IFs verteilen, das macht es dann auch leichter nachvollziehbar...

Außerdem würde ich mit mehr Klammern in den Abfragen arbeiten...
 
also aus Performancetechnischer Sicht würde ich erstmal abfragen, ob Freitag ist:
PHP:
if (date(N) == 5)) {
 $stunde=date(h);
 if($stunde==00) {
//=:00-0:59Uhr
...}
 elseif($stunde==01) {
//1:00-1:59Uhr
...}
}

else {
//tue rest
}


edit:// keine Garantie, dass das so alles 100% stimmt - hab schon seit nen paar Jahren nicht mehr in php geschrieben...

edit2:// du kannst nat. au noch die Minuten mit reinnehmen, allerdings wirds dann mim vergleichen mittels boolscher Operatoren etwas problematisch...
 
Zuletzt bearbeitet: (einschränkung)
Ein Fehler von mir, es soll nicht OR sondern AND also wenn Freitag udn diese Zeit dann das, wenn nicht prüfe nächste Zeit, wenn kein Freitag dann sofort woanders hin.

@KeepXtreme
Ich probiere das mal aus, danke.
 
Zuletzt bearbeitet:
Ich kenne PHP nicht sonderlich, aber ich würde nicht define verwenden und somit Konstanten definieren für etwas das sich mit jedem Aufruf ändert. Zudem würde ich die Minuten weglassen und nur die Stunden auf Gleichheit prüfen. Wenn beides notwendig wäre, dann würde ich sie einzeln prüfen, und nicht Größenverlgeiche auf Strings machen die nichtnumerische Werte (":") enthalten.



Auf den ersten Blick würde ich getdate verwenden um ein Array mit der Zeit zu bekommen, und dann

Ich nehme mal an, dass die = bei <= versehentlich waren und die erste Minute der nächsten Stunde nicht mehr mit berücksichtigt werden sollte?

Mein ungetestetes Beispiel sähe dann so aus:

PHP:
<?php
$current_date = getdate();

if ($current_date['wday'] == 5 && $current_date['hours']==12) 
{ 
// Es ist Freitag oder zwischen 12:00 und 12:59
}
else if ($current_date['hours']==13)
{
// Es ist zwischen 13:00 und 13:59
} 

?>
 
Zuletzt bearbeitet: (&& statt ||gewünscht)
Hmm...ich blicke jetzt garnicht mehr durch...

Hier mal eine vernünftige Beschreibung...

Das Script soll per CronJob jeweils täglich zur 8, 18, 36 und 54 Minute in der Stunde laufen.

Script:
An allen Tagen soll also zu jeder Stunde 4 mal was gemacht werden, Minuten interessieren nicht da das der CronJob ja macht, zu jeder Stunde heisst, ab 1uhr bis 2 Uhr tue das, ab 2uhr bis 3Uhr das, ab 3uhr bis 4Uhr dieses usw.
Also, das Script läuft 4 mal die Stunde, wenn es gestartet wird prüft es halt nur die Zeit und ob es Freitag ist und gibt das passende aus. 4 mal die Stunde wird also etwas identisches für die Stunde ausgegeben, zur nächsten Stunde wieder 4 mal was anderes usw.

Der Freitag:
An Freitagen soll was ganz anderes gemacht werden als zu den restlichen Tagen aber auch wieder jede Stunde abfragen und was passendes ausgeben.

Besser zu verstehen?
Ergänzung ()

Eure beiden Sachen funktionieren leider nicht, es wird immer das unter else ausgeben. Danke trotzdem, ich schaue mich woanders um.
 
Belee schrieb:
Ergänzung ()

Eure beiden Sachen funktionieren leider nicht, es wird immer das unter else ausgeben. Danke trotzdem, ich schaue mich woanders um.


Hast du bedacht, dass heute nicht Freitag ist?
Geht es wenn du den Tag erstmal ignorierst und nur die Stunden auswertest?
 
Mein Vorschlag wäre:

PHP:
$istFreitag = (date('w') == 5);
$stunde = intval(date('G'));

switch ($stunde) {

case 0:
	if ($istFreitag) {
		// was er am Freitag um 0 Uhr machen soll
	} else {
		// was er an Nicht-Freitagen um 0 Uhr machen soll
	}
	break;

case 1:
	// und so weiter eben
}
 
DjNDB schrieb:
Hast du bedacht, dass heute nicht Freitag ist?
Geht es wenn du den Tag erstmal ignorierst und nur die Stunden auswertest?

Erwischt :D wie doof kann man eigentlich sein?
Ich teste die ganze Zeit mit nem Freitag und wundere mich das hier nichts geht, ich brauche Schlaf. Danke!
 
DjNDB schrieb:
Da PHP Short-circuit evaluation macht sollte das für die Performance keinen Vorteil bringen.
das änder aber nicht daran, dass der Interpreter sämtliche Bedingungen durchgehen muss, wenn wie bei uns der fall "nicht Freitag" am Ende steht und es kein Freitag ist - natürlich gäbe es noch andere Lösungen, z.B. den Fall nicht Freitag an den Anfang zu stellen usw.
in meinem Fall spart man aber auch hinter der Tagesabfrage noch Zeit, denn die Bedingung "freitag" muss nicht jedesmal neu geprüft werden...
 
Hm..um das Problem zu eliminieren könnte man dann doch die switch/case Sache von @NullPointer nutzen und jeden Tag auslagern?
 
könnte man, ist aber ziemlich aufwendig - oder du nimmst meine Version mit der vorrangestellten Abfrage des Tages: da wird der Check der Uhrzeit nur durchgeführt, wenn wirklich freitag ist...
 
Sorry aber sowas als Cronjob zu verwenden ist meiner Meinung nach ziemlicher Schwachsinn, sorry.
Was ist wenn es in der Stunde keinen Besucher gibt?

Sorgst du auch dafür, dass nicht jeder Aufruf in dieser Zeitspanne den Job starten?

Wenn es nur ein Cronjob ist, verstehe ich sowieso die Komplexität der Abfrage nicht ganz - wozu die ganzen else-Teile?
 
Das ist ein Twitter Script, es wird alle 8 Minuten was in die Timeline gepostet :) deutlicher: es ist ein Now Playing Track Script - Radio, zu den Titeln poste ich auch die aktuelle Sendung, die sind ja nicht alle gleich "Stundenplan" ja und zu jeder Sendung gibt es dann halt "paar" seperate Beschreibungen darum die ganzen Abfragen!

@keep
Ja du hast recht, ich habe es so gemacht wie du es vorgeschlagen hast, ich prüfe mit IF ob Freitag, wenn nicht wird sofort zu den nächsten Tagen gesprungen.
Danke nochmals!
 
Zurück
Oben