2013-04-24 113 views
2

这是我的问题,我想以日期格式返回给定星期的星期一。根据“日期”字段查找一周的星期一

在这里,我已经努力到目前为止。

代码:

Dim Diff 
Dim cDate 
Dim prday 
prday = [table.datefield] 
Diff = Cint(0 - (Weekday(prday, 2))) 
cDate = DateAdd("d", Diff, prday) 
Result = cDate 

然而,这相当不幸返回24/12/1899。不完全是我想要的.. 2013年会很好。任何提示我出错的地方?

注:

其拉出数据库表在不同的应用程序完成的具体日期。这段代码应该会生成一个将在标签上显示的日期。

+1

http://stackoverflow.com/questions/1710487/finding-the-date-of-monday-in-a-week-with-vb-net – 2013-04-24 12:02:53

回答

7

唯一的问题是你想如何对待周日日期。

'Sunday as first day of week 
Dim someDate As DateTime = DateTime.Parse("Apr 28, 2013") 
'calculate monday 
'note: for Sunday this returns next Monday, i.e Apr 28, 2013 returns Apr 29th 
Dim monDate As DateTime = someDate.AddDays(DayOfWeek.Monday - someDate.DayOfWeek) 

'Monday as first day of week 
Dim someDate As DateTime = DateTime.Parse("Apr 28, 2013") 
'calculate monday 
If someDate.DayOfWeek = DayOfWeek.Sunday Then someDate = someDate.AddDays(-1) 
Dim monDate As DateTime = someDate.AddDays(DayOfWeek.Monday - someDate.DayOfWeek) 
+0

我的可能的复制乞求你的原谅借用你的想法,以更好地回答我的问题... – Steve 2013-04-24 14:06:37

2

定义的扩展方法

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 
+0

一个循环,而不是简单的数学?如果星期一是星期几的第一天呢? – dbasnett 2013-04-24 13:39:02

+0

不争论,只是为了展示一个扩展方法。 – Steve 2013-04-24 13:48:39