ASP以周一作为每周第一天,如何指定日期计算是当年第几周?

xiaosong2008 2015-03-02 11:53:23
我在开发的一个办公日志系统,其中的一个功能是客户可以写每周计划和每周总结。
计算指定日期在当年中是第几周,我现在写的程序如下:
'定义本周和下周年份,及本周和下周的周数
dim y,y1,n,n1
y=cint(year(date()))
n=DatePart("ww", date())
'判断下周日日期,以确定下周是否属于本年度
a=DatePart("w", Date) - 1
b=7-a
c= DateAdd("d", b, Date)
if year(c)=year(date()) then
y1=cint(year(date()))
n1=n+1
else
y1=cint(year(date()))+1
n1=1
end if

其中,计算第几周的程序,我现在用的函数是DatePart("ww", date()),这是以周日为每周第一天,我现在要以周一作为每周的第一天,去计算当前日期和下周一在当年是第几周,即周数。
请问以上程序应该怎么修改?请大家帮忙,谢谢!
...全文
399 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hookee 2015-03-04
  • 打赏
  • 举报
回复

Function GetNthWeek(sDate)
	Dim dt, daysElapsed, wd, n
	dt = CDate(sDate)
	daysElapsed = DateDiff("d", Year(dt) & "-1-1", dt)
	wd = Weekday(CDate(Year(dt) & "-1-1"), 2)
	If  wd = 1 Then
		n = daysElapsed \ 7
		If (daysElapsed Mod 7) <> 0 Then n = n + 1 
	Else
		If daysElapsed < (7 - wd + 1) Then
			n = 1
		Else
			daysElapsed = daysElapsed - (7 - wd + 1) + 1
			n = (daysElapsed \ 7) + 1
			If (daysElapsed Mod 7) <> 0 Then n = n + 1
		End If
	End If
	GetNthWeek = n
End Function
xiaosong2008 2015-03-03
  • 打赏
  • 举报
回复
引用 3 楼 hookee 的回复:


Response.Write GetNthWeek("2015-1-5")
Response.Write GetNextMondy("2015-1-6")

Function GetNthWeek(sDate)
	Dim dt, daysElapsed, wd, n
	dt = CDate(sDate)
	daysElapsed = DateDiff("d", Year(dt) & "-1-1", dt)
	wd = Weekday(CDate(Year(dt) & "-1-1"), 2)
	If  wd = 1 Then
		n = daysElapsed \ 7
		If (daysElapsed Mod 7) <> 0 Then n = n + 1 
	Else
		If daysElapsed < wd Then
			n = 1
		Else
		daysElapsed = daysElapsed - (wd - 1) 
			n = (daysElapsed \ 7) + 1
			If (daysElapsed Mod 7) <> 0 Then n = n + 1
		End If
	End If
	GetNthWeek = n
End Function

Function GetNextMondy(sDate)
	Dim dt, wd
	dt = CDate(sDate)
	wd = Weekday(dt, 2)
	GetNextMondy = DateAdd("d", dt, (7-wd+1))
End Function


谢谢您! 我测试了一下,您的函数写得很好!但有个问题请您还测试一下,2012年有366天(闰年),2012年1月1日是星期日,2012年12月31日是星期一,分别是2012年的第一周和最后一周,2012年应该有54周!麻烦您再帮忙测试、修改一下程序!谢谢!
hookee 2015-03-03
  • 打赏
  • 举报
回复


Response.Write GetNthWeek("2015-1-5")
Response.Write GetNextMondy("2015-1-6")

Function GetNthWeek(sDate)
	Dim dt, daysElapsed, wd, n
	dt = CDate(sDate)
	daysElapsed = DateDiff("d", Year(dt) & "-1-1", dt)
	wd = Weekday(CDate(Year(dt) & "-1-1"), 2)
	If  wd = 1 Then
		n = daysElapsed \ 7
		If (daysElapsed Mod 7) <> 0 Then n = n + 1 
	Else
		If daysElapsed < wd Then
			n = 1
		Else
		daysElapsed = daysElapsed - (wd - 1) 
			n = (daysElapsed \ 7) + 1
			If (daysElapsed Mod 7) <> 0 Then n = n + 1
		End If
	End If
	GetNthWeek = n
End Function

Function GetNextMondy(sDate)
	Dim dt, wd
	dt = CDate(sDate)
	wd = Weekday(dt, 2)
	GetNextMondy = DateAdd("d", dt, (7-wd+1))
End Function


xiaosong2008 2015-03-02
  • 打赏
  • 举报
回复
引用 1 楼 ysf0181 的回复:
算出,今天 与 那天 差几天。 chajitian = dateDiff("d","2009-5-1",now) ‘与现在相差多少天 yizhoujitian = 7 dijizhou = chajitian / yizhoujitian 'if chajitian / yizhoujitian <> chajitian \ yizhoujitian then dijizhou = dijizhou+1 if chajitian mod yizhoujitian <>0 then dijizhou = dijizhou+1 response.write dijizou
谢谢这位朋友! 可能我没有完全表述清楚,系统中定义的周为自然周,比如2015年1月1日为星期四,则2015年1月1日至1月4日为第1周,1月5-11日为第2周,1月12-18日为第3周,依次类推!我需要解决的问题是: 1、以每周一为一周的第一天,计算当前日期为本年度第几周(自然周); 2、如何计算下周一的日期。 谢谢!
ysf0181 2015-03-02
  • 打赏
  • 举报
回复
算出,今天 与 那天 差几天。 chajitian = dateDiff("d","2009-5-1",now) ‘与现在相差多少天 yizhoujitian = 7 dijizhou = chajitian / yizhoujitian 'if chajitian / yizhoujitian <> chajitian \ yizhoujitian then dijizhou = dijizhou+1 if chajitian mod yizhoujitian <>0 then dijizhou = dijizhou+1 response.write dijizou

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧