Problem mit Jahre und Kalenderwochen [PHP]

  • PHP

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    Problem mit Jahre und Kalenderwochen [PHP]

    Hallo liuebe Community,

    ich stehe mal wieder vor einem Problem.

    Ich habe eine Zeiterfassung programmiert.
    Diese rechnet alle Zeiten in der aktuellen Woche zusammen und überprüft dann immer Sonntags ob der Soll erreicht ist oder nicht. Entsprechend erhält man Überstunden oder Minusstunden.

    Jetzt geht die KW53 aus dem Jahre 2020 bis ins Jahr 2021.
    Wenn das System dann am Sonntag die Zeiten berechnen möchte hat er das Jahr 2021 und die KW 53... Obwohl die KW 53 ja noch zum Jahr 2020 gehört.
    Resultat: Das System hat den 04.01.2022 bis 10.01.2022 angezeigt. Da hat bisher ja noch niemand gearbeitet, ZACK alle haben entsprechend Minusstunden bekommen.

    Wie prüfe ich, ob die KW 53 schon im Jahr 2020 angefangen hat?

    Momentan sieht mein Code so aus:

    PHP-Quellcode

    1. $year = date("Y");
    2. $kw = date("W");


    Anschließend prüfe ich mittels:

    PHP-Quellcode

    1. if (strtotime($p["Datum"]) >= $t_montag and strtotime($p["Datum"]) <= $t_sonntag)


    damit das System entsprechend nur Daten anzeigt die der aktuellen Woche entsprechen.
    Das klappt allerdings nicht, wenn sich das Jahr in der selben KW verändert.


    Hat da jemand eine Idee?
    Ich weiß nicht, ob ich deine Frage richtig verstanden habe. Die Funktion um die Kalenderwoche richtig zu berechnen lautet:

    VB.NET-Quellcode

    1. Public Shared Function GetIso8601WeekOfYear(ByVal time As DateTime) As Integer
    2. Dim day As DayOfWeek = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time)
    3. If day >= DayOfWeek.Monday AndAlso day <= DayOfWeek.Wednesday Then
    4. time = time.AddDays(3)
    5. End If
    6. Return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
    7. End Function


    Quelle: social.msdn.microsoft.com/Foru…en-?forum=visual_studiode
    Hey, es handelt sich hierbei nicht um vb.net sondern um PHP.

    Ich habe das Problem, dass jetzt aktuell die letzte Kalenderwoche im Jahr 2020 die KW 53 war.
    Der Sonntag allerdings bereits im Jahr 2021.
    Wenn mein System am Sonntag per Cronjob die Stunden der zurückliegenden Woche berechnen soll hat er aber das Jahr 2021...
    Kalenderwoche 53 im Jahr 2021 ist aber falsch. Die KW 53 gehört ja noch zum Jahr 2020.

    Wie kann ich das überprüfen?
    Hey exc-jdbi,

    Damit kann lediglich die Kalenderwoche berechnet werden.

    Das geht in PHP ganz einfach mittels date("W");

    Mein Problem ist, dass die Kalenderwoche 53 im Jahr 2020 beginnt und im Jahr 2021 aufhört.
    Da meine Berechnungen immer am Ende der Woche ausgeführt werden nutzt er das Jahr 2021 und nicht das Jahr 2020.

    Dksksm schrieb:

    Oops, mein Fehler. PHP kenn ich gar nicht.Aber wenn ich zum Beispiel bei Google "PHP Kalenderwoche ermitteln" bekomme ich sehr interessante Hinweise.
    Das ermitteln der Kalenderwoche ist nicht das Problem :)Das Problem ist vielmehr: Wie erkenne ich, wenn eine Kalenderwoche im Jahre 2020 beginnt und im Jahre 2021 aufhört.Wenn ich meine Berechnungen durchführen möchte, nutzt mein Script dann ja das aktuelle Jahr (2021) muss aber das Jahr 2020 nutzen da die KW 53 ja noch zum Jahr 2020 gehört.
    KW sind dafür auch einfach nicht geeignet, eine KW hat keine Relation zu einem Jahr.
    Ich würde bei deinem Cronjob den Wochenanfang berechnen und damit arbeiten.
    Cronjob am 03.01.2021 = Wochenbeginn 28.12.2020
    Dir wäre dir aber sicher geholfen, wenn man weiss wenn eine KW anfängt und wenn es aufhört. Man müsste auch noch wissen wie viele KW ein entsprechendes Jahr hat, und das lässt sich auch ermitteln.
    stackoverflow.com/a/4862070

    Wenn das Anfangsdatum der KW bekannt ist, muss das Ende einfach +7 (bzw 6) sein bei dir. So sollte es doch für dich dann stimmen.