Ich arbeite derzeit an einer Website zur Verfolgung von Projekten. Darin ist es möglich, Service Level Agreements (SLAs) zu erstellen. Diese können mit den Wochentagen konfiguriert werden, an denen ein Projekt bearbeitet werden kann, und auch mit der Zeitspanne an jedem dieser Tage. Am Montag könnte dies z. B. zwischen 08:00 und 16:00 Uhr sein und am Freitag von 10:00 bis 14:00 Uhr. Sie werden auch mit einer Frist konfiguriert, die von der Priorität abhängt. So hat z. B. ein mit der Priorität "Niedrig" erstelltes Projekt eine Frist von zwei Wochen und ein Projekt mit der Priorität "Hoch" eine Frist von vier Stunden.
Das Problem, das ich habe, ist die Berechnung der Frist RUND um die oben beschriebenen Stunden. Angenommen, ich erstelle am Montag um 14:00 Uhr ein Projekt mit der Priorität "Hoch". Das heißt, ich habe vier Stunden für dieses Projekt. Aber wegen der Arbeitszeiten habe ich zwei Stunden am Montag (bis 16:00 Uhr) und dann weitere zwei Stunden am Freitag. Das bedeutet, dass der Abgabetermin für Freitag um 12:00 Uhr angesetzt werden muss.
Ich habe einige Zeit damit verbracht, dies zu googeln, und ich kann eine ganze Reihe von Beispielen finden, um herauszufinden, wie viele Arbeitsstunden zwischen einem bestimmten Start- und Enddatum liegen. Ich kann nur nicht herausfinden, wie man es in FINDING der Endzeit umwandelt, wenn man eine Startzeit und eine Zeitspanne bis zur Deadline angibt.
Die Tage/Zeitspannen werden in einer Sql-Datenbank in dem Format gespeichert:
Tag (z. B. 1 für Montag) StartHour EndHour
Die StartHour/EndHour werden als DateTimes gespeichert, aber natürlich ist nur der Zeitteil wichtig.
Die Art und Weise, die ich denke, es ist, ich habe irgendwie durch diese Zeiten zu iterieren und einige Datetime-Berechnungen zu tun. Ich kann nur nicht ganz herausfinden, was diese Berechnungen sein sollte, was der beste Weg ist.
Ich fand diese Frage hier auf der Website, als ich dies schrieb. Es ist in etwa das, was ich will, und ich spiele gerade damit, aber ich weiß immer noch nicht genau, wie ich es mit meinen dynamischen Arbeitstagen/-zeiten vereinbaren soll.