拡張メソッドを定義する
Imports System.Runtime.CompilerServices
Module DateExtensions
<Extension()>
Public Function GetMonday(ByVal dt As DateTime) as DateTime
While dt.DayOfWeek <> DayOfWeek.Monday
dt = dt.AddDays(-1)
End While
return dt
End Function
End Module
そして、それを呼び出します
prday = prday.GetMonday()
または、汎用にすることもできます
Public Function GetPreviousDayOfWeek(ByVal dt As DateTime, prevDay As DayOfWeek) as DateTime
While dt.DayOfWeek <> prevDay
dt = dt.AddDays(-1)
End While
return dt
End Function
@dbasnett が指摘したように、数学はループよりも高速であり、日曜日が週の最初の日である状況を処理できます。したがって、より良いアプローチは
Public Function GetMonday(ByVal dt As DateTime) as DateTime
Dim diff = Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek - DayOfWeek.Monday
dt = dt.AddDays(diff)
return dt.AddDays(DayOfWeek.Monday - dt.DayOfWeek)
End Function