我试图获得本周的日期(周一至周日)。
这是我目前的代码:
Dim kw As Integer = DatePart(DateInterval.WeekOfYear, Now, , FirstWeekOfYear.FirstFourDays)
If DatePart(DateInterval.Weekday, Now, Microsoft.VisualBasic.FirstDayOfWeek.Sunday) = 6 Then
kw = kw + 1
End If
Dim CurrDateFirstDay As Date = DateAdd(DateInterval.Day, 1, ReturnDateForWeekNumber(kw))
For i = 1 To 7
strCurrDay = FormatDateTime(CurrDateFirstDay, DateFormat.LongDate)
........
我的问题是我的代码从2013年1月16日开始,最后一个日期是下周的星期二22.01.2013。这是为什么?他为什么要在2013年1月16日星期三而不是2013年1月14日星期一开始?为什么我会在下周返回日期?我做错了什么?
编辑:
ReturnDateForWeekNumber:
Public Shared Function ReturnDateForWeekNumber(ByVal iWeek As Integer) As DateTime
Return DateAdd(DateInterval.WeekOfYear, iWeek - 1, FirstDayOfYear)
End Function
答案 0 :(得分:3)
我做错了什么?
你应该在调试器中单步执行代码并观察结果,就像我做的那样:
Dim kw As Integer = DatePart(DateInterval.WeekOfYear, Now, , FirstWeekOfYear.FirstFourDays)
这将返回当前周,即第3周。
If DatePart(DateInterval.Weekday, Now, Microsoft.VisualBasic.FirstDayOfWeek.Sunday) = 6 Then
kw = kw + 1
End If
检查工作日是否是一周的第6天(星期五)。我们不是星期五,所以如果没有输入条件。
Dim CurrDateFirstDay As Date = DateAdd(DateInterval.Day, 1, ReturnDateForWeekNumber(kw))
这会给ReturnDateForWeekNumber的结果增加一天,返回:
Return DateAdd(DateInterval.WeekOfYear, iWeek - 1, FirstDayOfYear)
这将在一周的第一天(1月1日)增加2周(第3周减去1周)。 1月1日+ 2周= 1月15日。
现在请记住,您将一天添加到ReturnDateForWeekNumber,这就是CurrDateFirstDay
的值为1月16日的原因。
修改强>
我认为您的代码过于复杂,并且使用了许多传统的VB6函数。我会这样做:
Dim myDate As Date = DateTime.Today
Dim dayDiff As Integer = myDate.DayOfWeek - DayOfWeek.Monday
Dim currentDay As Date = myDate.AddDays(-dayDiff) 'Monday
For i = 1 to 7
Console.WriteLine(currentDay)
'Do something with current day
currentDay = currentDay.AddDays(1)
Next
您可能需要对您的案例进行一些调整,但我相信这种方法更简单,更不容易出错。
答案 1 :(得分:0)
Dim dateStartDateOfWeek As Date = GetWeekStartDate(52, 2014)
Dim dateEndDateOfWeek As Date = DateAdd(DateInterval.Day, 7, dateStartDateOfWeek)
Private Function GetWeekStartDate(ByVal weekNumber As Integer, ByVal year As Integer) As Date
Dim startDate As New DateTime(year, 1, 1)
Dim weekDate As DateTime = DateAdd(DateInterval.WeekOfYear, weekNumber - 1, startDate)
Return DateAdd(DateInterval.Day, (-weekDate.DayOfWeek) + 1, weekDate)
End Function