关于截止日期的算法!!在线等待。。结贴

yangxuhua 2008-08-29 09:43:51
给定1个开始日期,和1个合同工作日,除去星期6,天外的时间。

比如:开始日期为 2008-8-1,合同工作日为:25个工作日(遇礼拜6,7往后顺延),
现在要计算出正确的合同截止日期,该如何实现??

请附上代码(运行正确)
...全文
151 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangchaokun 2008-08-30
  • 打赏
  • 举报
回复
按你说的举例说明:
开始日期为 2008-8-1,合同工作日为:25个工作日(遇礼拜6,7往后顺延),
则合同截止日期为2008-9-5,

<%=DateAdd("D",35,"2008-8-1")%>即可
zhangchaokun 2008-08-30
  • 打赏
  • 举报
回复
25天正好是5的5倍,意味着刚好过5个星期,
将你现在的日期加35天就正好是你合同截止日期.

根本不用什么循环.
yangxuhua 2008-08-30
  • 打赏
  • 举报
回复
已结贴
yangxuhua 2008-08-30
  • 打赏
  • 举报
回复
非常感谢 xie_yanke 按你的方法调试成功,也很感谢其他各位兄台!

需要交朋友的可以联系我:

qq:94118572
注明csdn朋友
yangxuhua 2008-08-30
  • 打赏
  • 举报
回复
开始日期,和工作日都是做参数,变化,我上只是举个例子,
上面几位兄台说的方法,我会测试下,
没问题就结贴
jiangpingchang 2008-08-30
  • 打赏
  • 举报
回复
adddate是你合同执行的天数
jiangpingchang 2008-08-30
  • 打赏
  • 举报
回复
dim adddate,enddate
adddate = 0
EndTime = date()
do while adddate<=8
EndTime = dateadd("d",EndTime,1)
select case weekday(EndTime)
case "1"
adddate = adddate
case "7"
adddate = adddate
case "2"
adddate = adddate + 1
case "3"
adddate = adddate + 1
case "4"
adddate = adddate + 1
case "5"
adddate = adddate + 1
case "6"
adddate = adddate + 1
end select
loop
response.write(EndTime)
EndTime就是合同日期结束的日子,参照六楼的修改的
Anlige 2008-08-30
  • 打赏
  • 举报
回复
.........
xie_yanke 2008-08-30
  • 打赏
  • 举报
回复
<script language="vbscript">
s = CDate("2008-8-1")
over = 25
m = 0
Do
s = DateAdd("d", 1, s) '正常逐次加一天
If Weekday(s) <> 1 and Weekday(s) <> 7 Then '遇到非周六周日,则m变量加1
m = m + 1
End If
If m = over Then Exit Do '如果m满足最终结束时间, 则退出循环
Loop
Document.write("结束时间:" & s) '打印需要的时间.
</script>

这个是写的vbscript客户端脚本, 你把document.write 换成response.write 就是后台脚本了.
yangxuhua 2008-08-29
  • 打赏
  • 举报
回复
你的这个方法有个问题,就是for 循环的那里有问题,但我又不晓得问题在哪里。。如果for i= 1 to 总工作日
专业算出来好像有问题。。
yangxuhua 2008-08-29
  • 打赏
  • 举报
回复
上面说的方法好像有问题:
allday=0
time1=#2008-8-4#
for i=1 to 20
if weekday(dateadd("d",i,time1))=1 or weekday(dateadd("d",i,time1))=7 then
i=i-1
allday=allday+1
else
allday=allday+1
end if
next
time2=dateadd("d",allday,time1)
response.Write(time2)

这个我按你意识写的,出现死循环。
TakiCN 2008-08-29
  • 打赏
  • 举报
回复
最傻的办法是做一个循环
allday=0
比如for i= 1 to 总工作日
然后判断 date+i 是否是休息日
if date+i=休息日 then
i=i-1
allday=allday+1
else
allday=allday+1
end if
next
然后结束日期就是 date+allday 至于合同签署当日是否算,你可以按照需求修改allday的默认值

28,391

社区成员

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

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