需求:
按月计算合同内各级别物品的总价
给定条件如下:
1.合同内共有四种级别物别,且价格不同;
2.各级别物品价格的定义为每月的价格;
3.每天的价格为各级别物品的价格除以30;
4.要求计算输入的日期段内的价格,(截止日期大于起始日期,如小于不必考虑)
5.如果两日期相差不到一个月,则小于15天的,总价按天数计算;大于等于15天的按月计算
6.如果两日期相差大于一个月,则整月的,总价按月计算;
7.大于一个月且非整月的,则小于15天的,总价按天数计算;大于等于15天的按月计算
实现:
计算指定时间段内的合同总价:<br><br>
<form method="post" action="test.asp?action=1">
发布起始日期:<input type="text" name="datestart" value="<%=request("datestart")%>"><br>
发布截止日期:<input type="text" name="dateend" value="<%=request("dateend")%>"><br>
aa 级价格:<input type="text" name="aa" value="6000"> /月 __ 200.00 /日<br>
a 级价格:<input type="text" name="a" value="4800"> /月 __ 160.00 /日<br>
b 级价格:<input type="text" name="b" value="3200"> /月 __ 106.66~/日<br>
c 级价格:<input type="text" name="c" value="2400"> /月 __ 80.00 /日<br>
各个级别数量按 10 个计算<br>
<input type="submit" name="submit3" value="总 计">
</form>
<%
if request("action")=1 then
response.write "总价= "&diff_month(request("datestart"),request("dateend"),request("aa"),request("a"),request("b"),request("c"),10,10,10,10)
end if
function diff_month(startdate,enddate,moneyf_aa,moneyf_a,moneyf_b,moneyf_c,amountaa,amounta,amountb,amountc)
different=datediff("m",startdate,enddate)
如果在一个月内
if datediff("m", startdate, enddate)=0 then
if datediff("d", startdate, enddate)+1<15 then
diff_month=(moneyf_aa/30)*amountaa*(datediff("d", startdate, enddate)+1) + (moneyf_a/30)*amounta*(datediff("d", startdate, enddate)+1) + (moneyf_b/30)*amountb*(datediff("d", startdate, enddate)+1) + (moneyf_c/30)*amountc*(datediff("d", startdate, enddate)+1)
end if
if datediff("d", startdate, enddate)+1>=15 then
diff_month=moneyf_aa*amountaa + moneyf_a*amounta + moneyf_b*amountb + moneyf_c*amountc
end if
end if
如果相差大于一个月的整月
if datediff("m", startdate, enddate)>0 and datediff("d", dateadd("m", different, startdate), enddate)=0 then
diff_month=(moneyf_aa*amountaa + moneyf_a*amounta + moneyf_b*amountb + moneyf_c*amountc)*different
end if
如果形如2002-03-15、2002-05-25
if datediff("m", startdate, enddate)>0 and datediff("d", dateadd("m", different, startdate), enddate)>0 then
如果相差大于一个月且<15天
if datediff("d", dateadd("m", different, startdate), enddate)+1<15 then
diff_month=(moneyf_aa*amountaa + moneyf_a*amounta + moneyf_b*amountb + moneyf_c*amountc)*different
diff_month=diff_month+((moneyf_aa/30)*amountaa*(datediff("d", dateadd("m", different, startdate), enddate)+1) + (moneyf_a/30)*amounta*(datediff("d", dateadd("m", different, startdate), enddate)+1) + (moneyf_b/30)*amountb*(datediff("d", dateadd("m", different, startdate), enddate)+1) + (moneyf_c/30)*amountc*(datediff("d", dateadd("m", different, startdate), enddate)+1))
end if
如果相差大于一个月且>=15天
if datediff("d", dateadd("m", different, startdate), enddate)+1>=15 then
diff_month=(moneyf_aa*amountaa + moneyf_a*amounta + moneyf_b*amountb + moneyf_c*amountc)*(different+1)
end if
end if
如果形如2002-03-15、2002-05-01
if datediff("m", startdate, enddate)>=1 and datediff("d", dateadd("m", different, startdate), enddate)<0 then
different=datediff("m",startdate,enddate)-1
如果相差大于一个月且<15天
if datediff("d", dateadd("m", different, startdate), enddate)<15 then
diff_month=(moneyf_aa*amountaa + moneyf_a*amounta + moneyf_b*amountb + moneyf_c*amountc)*different
diff_month=diff_month+((moneyf_aa/30)*amountaa*(datediff("d", dateadd("m", different, startdate), enddate)+1) + (moneyf_a/30)*amounta*(datediff("d", dateadd("m", different, startdate), enddate)+1) + (moneyf_b/30)*amountb*(datediff("d", dateadd("m", different, startdate), enddate)+1) + (moneyf_c/30)*amountc*(datediff("d", dateadd("m", different, startdate), enddate)+1))
end if
如果相差大于一个月且>=15天
if datediff("d", dateadd("m", different, startdate), enddate)>=15 then
diff_month=(moneyf_aa*amountaa + moneyf_a*amounta + moneyf_b*amountb + moneyf_c*amountc)*(different+1)
end if
end if
end function
%>
