如何判断某个日期是某个月的最后一周??
有这方面的函数吗 问题点数:80、回复次数:17Top
1 楼CPLiu(老了)回复于 2005-05-10 11:30:13 得分 0
datediffTop
2 楼viena(维也纳N02)回复于 2005-05-10 11:33:34 得分 40
'假设判断的日期型date1
If DatePart("ww", DateSerial(Year(date1), Month(date1) + 1, 1)) = DatePart("ww", date1) Then
MsgBox "月的最后一周"
End If
If Weekday(DateSerial(Year(date1), Month(date1) + 1, 0)) = 7 And DatePart("ww", DateSerial(Year(date1), Month(date1) + 1, 1)) = DatePart("ww", date1) + 1 Then
MsgBox "月的最后一周"
End IfTop
3 楼viena(维也纳N02)回复于 2005-05-10 11:50:51 得分 0
以上是按默认的周日作为一周的开始
Top
4 楼seabird125(海鸥)回复于 2005-05-10 11:52:35 得分 0
好象还是有问题,比如 2005 12.26是属于最后一周的...怎么没有算在内呢??Top
5 楼seabird125(海鸥)回复于 2005-05-10 11:54:32 得分 0
我希望是周日为一周的开始啊~~~..12.31号也不是最后一周。..好象就只12月的有问题。.我测试了一下Top
6 楼viena(维也纳N02)回复于 2005-05-10 11:56:18 得分 0
'解释一下以上代码
DatePart("ww", date1)
判断date1是一年的第几周
如果date1的周数与下月1日的周数相同,则是月的最后一周
如果下月1日的周数是date1的周数+1而且当月最后一天是周的最后一天,则是月的最后一周Top
7 楼viena(维也纳N02)回复于 2005-05-10 12:01:27 得分 0
是有漏洞,按年第几周算的,下一年是第一周了,不再是现在周数加1Top
8 楼icedut(冰-装修进行中)回复于 2005-05-10 12:02:51 得分 0
SET DATEFIRST
将一周的第一天设置为从 1 到 7 之间的一个数字。
语法
SET DATEFIRST { number | @number_var }
参数
number | @number_var
是一个整数,表示一周的第一天,可以是下列值中的一个。
值 一周的第一天是
1 星期一
2 星期二
3 星期三
4 星期四
5 星期五
6 星期六
7(默认值,美国英语) 星期日
Top
9 楼icedut(冰-装修进行中)回复于 2005-05-10 12:05:37 得分 0
是否可以这样判断
先得到某个月的最后一天,在得到最后一天的星期数
在得到某个日期的星期数,如果这两个星期数一样那就ok了Top
10 楼icedut(冰-装修进行中)回复于 2005-05-10 12:11:58 得分 0
转贴
作者Blog:http://blog.csdn.net/playyuer/
create function udf_WeekOfMonth(@Date datetime)
-- 返回 @Date 是所在月的第几周 周日是当周的最后一天
returns integer
as
begin
return datediff(week
,case when (@@Datefirst + datepart(weekday,dateadd(month,datediff(month,0,@Date),0))) % 7 = 1
then dateadd(month,datediff(month,0,@Date),0) - 1
else
dateadd(month,datediff(month,0,@Date),0)
end
,case when (@@Datefirst + datepart(weekday,@Date)) % 7 = 1
then @Date-1
else @Date
end
) + 1
end
go
Top
11 楼viena(维也纳N02)回复于 2005-05-10 12:34:15 得分 0
'再加个判断加好了
Dim date1 As Date
date1 = "2005-12-25"
Dim lastDayMonth As Date, lastDayYear As Date, FirstDayNextMonth As Date
lastDayMonth = DateSerial(Year(date1), Month(date1) + 1, 0) '月的最后一天
lastDayYear = DateSerial(Year(date1) + 1, 1, 0) '年的最后一天
FirstDayNextMonth = DateSerial(Year(date1), Month(date1) + 1, 1) '下月第一天
If DatePart("ww", FirstDayNextMonth) = DatePart("ww", date1) Then
MsgBox "最后一周"
End If
If Weekday(lastDayMonth) = 7 And (DatePart("ww", FirstDayNextMonth) = DatePart("ww", date1) + 1) Then
MsgBox "最后一周"
End If
If Weekday(lastDayMonth) = 7 And DatePart("ww", date1) = DatePart("ww", lastDayYear) And DatePart("ww", FirstDayNextMonth) = 1 Then
MsgBox "最后一周"
End IfTop
12 楼icedut(冰-装修进行中)回复于 2005-05-10 12:37:30 得分 0
和星星学到了DateSerial 函数
以前还真不知道这个函数
Top
13 楼viena(维也纳N02)回复于 2005-05-10 12:38:17 得分 0
加的这个是
判断(当月最后一天是周的最后一天)且这一周是年的最后一周(等于年最后一天的周数),下月1日是第一周Top
14 楼icedut(冰-装修进行中)回复于 2005-05-10 13:32:46 得分 0
如果日期和当月最后一天的周数相同,不就是最后一周了么
这样判断应该简单些吧Top
15 楼icedut(冰-装修进行中)回复于 2005-05-10 13:35:38 得分 40
Dim date1 As Date
date1 = "2005-12-25"
Dim lastDayMonth As Date,
lastDayMonth = DateSerial(Year(date1), Month(date1) + 1, 0) '月的最后一天
If DatePart("ww", lastDayMonth ) = DatePart("ww", date1) Then
MsgBox "最后一周"
End If
这样应该也对巴,借用星星的ddTop
16 楼viena(维也纳N02)回复于 2005-05-10 13:36:48 得分 0
:$
冰MM聪明啊,呵呵
If DatePart("ww", DateSerial(Year(date1), Month(date1) + 1, 0)) = DatePart("ww", date1) Then
MsgBox "月的最后一周"
End If
Top
17 楼icedut(冰-装修进行中)回复于 2005-05-10 13:40:35 得分 0
我也聪明一回:)Top




