Powershell - Umrechnung Kalenderwoche zu Datum
Moin zusammen,
irgendwie scheint mir der richtige Suchbegriff zu fehlen.
Ich suche nach einer Möglichkeit, eine Kalenderwoche in ein Datum umzuwandeln - und zwar in den enthaltenen Freitag.
Beispiel: KW 27/2019 -> 05.07.2019
Hat hier jemand einen Tipp für mich?
Gruß
irgendwie scheint mir der richtige Suchbegriff zu fehlen.
Ich suche nach einer Möglichkeit, eine Kalenderwoche in ein Datum umzuwandeln - und zwar in den enthaltenen Freitag.
Beispiel: KW 27/2019 -> 05.07.2019
Hat hier jemand einen Tipp für mich?
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 467951
Url: https://administrator.de/contentid/467951
Ausgedruckt am: 04.12.2024 um 08:12 Uhr
9 Kommentare
Neuester Kommentar
Hi,
ausgehend davon, dass der 1.1. immer in der 1. KW ist, kannst Du schonmal ein Datum in der Zielwoche berechnen.
Davon nun den Wochentag bestimmen und davon wiederum auf den Freitag hochrechnen.
E.
Edit:
DayOfWeek arbeitet mit Basis "Sonntag".
Edit 2:
Das muss man noch ausfeilen. z.B. berücksichtigen, wenn der 1.1. ein Sa. oder So. ist.
ausgehend davon, dass der 1.1. immer in der 1. KW ist, kannst Du schonmal ein Datum in der Zielwoche berechnen.
$JAHR=2019
$KW = 27
$KW_Tag = (Get-Date("01.01.$JAHR")).AddDays(($KW - 1) * 7)
Davon nun den Wochentag bestimmen und davon wiederum auf den Freitag hochrechnen.
E.
Edit:
DayOfWeek arbeitet mit Basis "Sonntag".
$JAHR=2019
$KW = 27
$KW_Tag = (Get-Date("01.01.$JAHR")).AddDays(($KW - 1) * 7)
$KW_Freitag = $KW_TAG.AddDays(5 - $KW_Tag.DayOfWeek.Value__)
Edit 2:
Das muss man noch ausfeilen. z.B. berücksichtigen, wenn der 1.1. ein Sa. oder So. ist.
Moin,
soweit war ich auch gerade für dieses Jahr:
Das Problem ist aber nicht nur, dass man in anderen Jahren feststellen muss, wieviel man für den Freitag aufaddieren muss, sondern auch, welches die erste Woche ist. Wenn ich mich recht erinnere, immer dann vom 1.1., wenn der höchstens ein Mittwoch ist, sonst die Woche drauf.
Wenn Du das ausprogrammierst, würde es mich interessieren, das mal zu sehen.
Liebe Grüße
Erik
soweit war ich auch gerade für dieses Jahr:
(get-date("01.01.2019")).adddays(26*7+3)
Das Problem ist aber nicht nur, dass man in anderen Jahren feststellen muss, wieviel man für den Freitag aufaddieren muss, sondern auch, welches die erste Woche ist. Wenn ich mich recht erinnere, immer dann vom 1.1., wenn der höchstens ein Mittwoch ist, sonst die Woche drauf.
Wenn Du das ausprogrammierst, würde es mich interessieren, das mal zu sehen.
Liebe Grüße
Erik
Na prima. Dann berücksichtigst Du das eben auch noch.
01.01. --> Wochentag abfragen und KW-Offset festlegen. Falls 01.01. ein Freitag oder höher, dann ist der KW-Offset = 1, sonst = 0.
Ist $KW_Tag ein Sa oder Sonntag dann muss die Berechnung eben "minus" sein, sonst "plus".
01.01. --> Wochentag abfragen und KW-Offset festlegen. Falls 01.01. ein Freitag oder höher, dann ist der KW-Offset = 1, sonst = 0.
Ist $KW_Tag ein Sa oder Sonntag dann muss die Berechnung eben "minus" sein, sonst "plus".
$JAHR=2019
$KW = 27
$Neujahr = Get-Date("01.01.$JAHR")
If( $Neujahr.DayOfWeek.Value__ -gt 5 ) {$KW += 1}
$KW_Tag = $Neujahr.AddDays(($KW - 1) * 7)
If($KW_Tag.DayOfWeek.Value__ -gt 5) {
$KW_Freitag = $KW_TAG.AddDays($KW_Tag.DayOfWeek.Value__ - 5)
}
Else {
$KW_Freitag = $KW_TAG.AddDays(5 - $KW_Tag.DayOfWeek.Value__)
}
Das passt auch bei 2017.
Ich suche nach einer Möglichkeit, eine Kalenderwoche in ein Datum umzuwandeln - und zwar in den enthaltenen Freitag.
function Get-DayOfCalendarWeek([int]$year,[int]$week,[System.DayOfWeek]$weekday){
$d_jan = Get-Date -Year $year -Day 1 -Month 1 -Hour 0 -Minute 0 -Second 0
$dOffset = [DayOfWeek]::Thursday - $d_jan.DayOfWeek
$cal = ([CultureInfo]::CurrentCulture).Calendar
$firstWeek = $cal.GetWeekOfYear($d_jan.AddDays($dOffset), [System.Globalization.CalendarWeekRule]::FirstFourDayWeek, [DayOfWeek]::Monday)
$week = @{$true=$week-1;$false=$week }[($firstweek -le 1)]
return $d_jan.AddDays($dOffset).AddDays($week * 7).AddDays($weekday - 4)
}
Get-DayOfCalendarWeek -year 2019 -week 27 -weekday Friday