Liebes Forum,
bin „mal wieder“ auf ein Problem gestoßen und möchte euch gerne um Hilfe bitten:
Ich würde gerne innerhalb eines Skriptes einen genauen Zeitpunkt identifizieren, was ja z.B. über eine einfache Abfrage möglich wäre:
if (strtotime ("Now") == strtotime ("<gewünschter Zeitpunkt>")
{
// Zeitpunkt identifiziert
}
Konkret wäre das z.B. der 1. Tag in einem Monat oder einer Woche etc.
Das würde in meinen Augen aber mind. einen sekündlichen Aufruf des Skriptes erfordern, und selbst dann ist nicht sichergestellt, ob durch z.B. höherpriore Systemtasks die Ausführung um wenige Millisekunden verzögert wird und ich „die“ genaue Sekunde, in der die Abfrage „wahr“ ist, verpasse.
Eine Lösung über einen Zeitbereich wäre prinzipiell ja möglich:
if (strtotime (("Now") > strtotime ("<gewünschter Zeitpunkt> - Offset") || (strtotime ("Now") > strtotime ("<gewünschter Zeitpunkt> + Offset"))
{
// Zeitpunkt identifiziert
}
Zum einen finde ich diese Lösung „unschön“, zum anderen birgt sie je nach Konfiguration die Gefahr, den Code für einen bestimmten Zeitpunkt mehr als ein Mal aufzurufen, da je nach Frequenz des Aufrufs auch ein entsprechend großer Zeitbereich „definiert“ werden muss und damit ggfs. zwei Skriptaufrufe zwischen
strtotime ("<gewünschter Zeitpunkt> - Offset") < (strtotime ("Now") < strtotime ("<gewünschter Zeitpunkt> + Offset")
möglich sind. Eine „Anforderung“, die ich mir selbst gestellt habe ist gerade bei langsamen Vorgängen wie z.B. der Heizungsregelung, das Skript nur alle paar Minuten aufzurufen.
Für die „1 mit Stern“: Noch schwieriger wird es nach meiner Ansicht, wenn ein Skript Eventbezogen aufgerufen wird, d.h. ich keine Aussage über die Frequenz des Aufrufs treffen kann.
Hat jemand von euch eine bessere Lösung parat?
Danke für eure Hilfe, VG Olaf