WinFuture-Forum.de: [php] Regelmäßige Termine Eintragen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[php] Regelmäßige Termine Eintragen


#1 Mitglied ist offline   phillymarx 

  • Gruppe: aktive Mitglieder
  • Beiträge: 677
  • Beigetreten: 10. September 03
  • Reputation: 0
  • Wohnort:Barsinghausen

geschrieben 10. Oktober 2006 - 21:40

Hallo!
Ich bin gerade in einem Projekt, in dem eine bestimmte Aktion regelmäßig ausgeführt werden soll. Der Abstand ist aber von Aktion zu Aktion unterschiedlich:
Die eine nur werktags, die Andere nur Montags, Mitwochs und Donnerstags, die Andere nur am Wochenende und noch eine Montags, Dienstags und Freitags. Tage alle variabel, nur Beispiele.

So, wie code ich das in PHP nun vernünftig, sodass ich alle Aktionen flexibel gestalten kann? Das heisst, ich will möglichst unkompliziert die Rhytmen ändern können, temporär aussetzen können oder ganz löschen können.

Mir fällt einfach kein Konzept ein, das flexibel zu lösen, sodass ich nicht alle Termine für nen halbes Jahr o.ä. in eine Datenbank schreiben muss. Bitte helft mir mal über die Denkblockade hinweg...
0

Anzeige



#2 Mitglied ist offline   asko 

  • Gruppe: aktive Mitglieder
  • Beiträge: 144
  • Beigetreten: 17. November 02
  • Reputation: 0

geschrieben 11. Oktober 2006 - 01:30

Hallo

Schon ein Blick auf die date()-Funktionen von PHP geworfen? Damit kann man sehr flexibel alle möglichen Sachen nach Datum, Wochentage, Wochen-Nummer, usw. steuern.
if (date('l') == "Monday") {
	// Tu was
}

if (date('W') % 2 == 0) {
	// Tu was
}


Das erste Beispiel prüft ob Montag ist und führt ggfs die Befehle aus. Das kann man ja beliebig auf alle Wochentage ausbauen, bzw für unterschiedliche Wochentage verschiedene Aktionen ausführen.
Das zweite Beispiel prüft, ob die Wochenzahl gerade oder ungerade ist und führt dementsprechend Befehle aus. So kann man z.B. sagen, daß jede ungerade Woche (momentan haben wir Woche 41 von 52) ein Backup der DB gemacht werden soll.
Wie gesagt, die date() und time() Funktionen sind sehr mächtig und es gibt quasi nichts das man damit nicht machen kann, solange es sich um Datum/Zeit Aufgaben handelt.
Keine Ahnung was Du da alles vorhast, aber für solche Steuerungs-Scripts eignen sich Cronjobs am besten.

Dieser Beitrag wurde von asko bearbeitet: 11. Oktober 2006 - 01:31

0

#3 Mitglied ist offline   phillymarx 

  • Gruppe: aktive Mitglieder
  • Beiträge: 677
  • Beigetreten: 10. September 03
  • Reputation: 0
  • Wohnort:Barsinghausen

geschrieben 12. Oktober 2006 - 07:32

Nur, wie speicherst du das dann in der Datenbank vernünftig ab? Mit Uhrzeiten? Und es ist ja nicht so schön regelmäßig, dass es nur alle zwei Wochen sind oder jeden Mittwoch.

Jede Aktion kann in einem vom User definierten Intervall und Zeitpunkt ausgefürt werden. Das alles in einzelne if-Abfragen zu packen, da würde ich nächstes Jahr immer noch dran sitzen...
0

#4 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 12. Oktober 2006 - 18:48

Beitrag anzeigenZitat (phillymarx: 12.10.2006, 06:32)

Nur, wie speicherst du das dann in der Datenbank vernünftig ab? Mit Uhrzeiten? Und es ist ja nicht so schön regelmäßig, dass es nur alle zwei Wochen sind oder jeden Mittwoch.

Doch ist es^^

Zitat

Jede Aktion kann in einem vom User definierten Intervall und Zeitpunkt ausgefürt werden. Das alles in einzelne if-Abfragen zu packen, da würde ich nächstes Jahr immer noch dran sitzen...

Dazu musst halt eine "Engine" schreiben die die Uhrzeiten und DB einträge auswerten kann^^
0

#5 Mitglied ist offline   phillymarx 

  • Gruppe: aktive Mitglieder
  • Beiträge: 677
  • Beigetreten: 10. September 03
  • Reputation: 0
  • Wohnort:Barsinghausen

geschrieben 12. Oktober 2006 - 18:51

Zitat

' date='12.10.2006, 19:48' post='750691']
Dazu musst halt eine "Engine" schreiben die die Uhrzeiten und DB einträge auswerten kann^^

Soooo und nun sind wir auf einem Nenner <_<

Denn genau dabei habe ich meine Probleme ;)
0

#6 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 13. Oktober 2006 - 08:20

Wo genau liegt das Problem?
Nimm halt einfach die Zeit des Eintrags, etc. und wann er das nächste mal stattfinden soll?!
0

#7 Mitglied ist offline   phillymarx 

  • Gruppe: aktive Mitglieder
  • Beiträge: 677
  • Beigetreten: 10. September 03
  • Reputation: 0
  • Wohnort:Barsinghausen

geschrieben 13. Oktober 2006 - 10:35

Machen wir es praktisch, nach deinem Vorschlag.
Wir haben eine Tabelle:

eintragszeit | nächste_ausfuehrzeit

Es ist eingetragen, wann der Job gestartet wurde und wann er das nächste Mal läuft.
So. Der Job soll jeden Montag um 6.30 laufen, Dienstags um 7, Mittwochs aussetzen, Donnerstags wieder um 6.30, Freitags um 5 und Samstags sowie Sonntags erst um 9.
Ein anderer User möchte seine Aktionen Montags bis Donnerstags um 8.45, Freitag und Samstags gar nicht und Sonntags um 10.

Hardcoden in den Quellcode rein? Unmöglich. Schließlich gibt es noch einen dritten, einen vierten und einen fünften und vielleicht noch einen sechsten, einen siebten und einen achten, wohlmöglich sogar einen neunten, einen zehnten und ... User
Wie sorge ich dafür, dass nun die Aktionen regelmäßig nach diesen Vorgaben ausgeführt werden?
0

#8 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 13. Oktober 2006 - 12:31

Erst mal zum eintragen, ich würde die Absoulute Zeit nehmen, also die Anzahl der Sekunden die seit dem Januar 1 1970 00:00:00 GMT vergangen ist nehmen als Uhrsprungswert zum abspeichern in der DB, dazu würde ich allerdings nicht umbedingt das eintragsdatum nehmen sondern das Datum an dem Das ereignis zum ersten mahl ausgeführt werden soll und danach das Intervall zum nächsten Zeitpunkt, an dem das alte Datum überschrieben wird, falls das Intervall geändert wird.
Für jeden User würde ich halt eine eigenen Datensatz anlegen^^
0

#9 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.263
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 13. Oktober 2006 - 12:47

also ich würde einfach nur für jedes ereignis einen datensatz machen mit ereignis, startzeitpunkt und intervall. das sollte für das grundgerüst doch reichen. tjo - und wie [Elite-|-Killer] schreibt, den startzeitpunkt als unix-timestamp und das intervall in sekunden und schon lässt sich das ganz einfach abgleichen. (die eingabe kann ja in stunden, tagen oder wochen erfolgen, nur dass das skript das dann eben umrechnet und den sekundenwert in die datenbank schreibt.)

Dieser Beitrag wurde von Gitarremann bearbeitet: 13. Oktober 2006 - 12:51

Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0