| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 994 人关注过本帖
标题:求助,如何分段计算月数
只看楼主 加入收藏
y12692189
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2021-9-23
结帖率:63.64%
收藏
已结贴  问题点数:20 回复次数:8 
求助,如何分段计算月数
常量为几个固定时间节点,比如2000-1-1,2010-1-1,2015-1-1,我想输入一个开始日期,一个结束日期,计算出在各个时间段各包含几个月,怎么写呢?

应用与物业费计算程序,各个时间节点的收费价格不同,所以要分段计算。

1990-1-1至1999-12-31,0.1元/月
2000-1-1至2009-12-31,0.5元/月
2010-1-1至2014-12-31,0.8元/月
2015-1-1至今1.2元/月

有大神有什么好的方法吗?
搜索更多相关主题的帖子: 节点 计算 物业 日期 分段 
2022-10-17 10:24
fyyylyl
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:313
专家分:820
注 册:2006-5-22
收藏
得分:5 
PARAMETERS  date1,date2
    n=1
DO WHILE .t.
    IF GOMONTH(date2,n)<=date1
        n=n+1
    ELSE
        EXIT
    ENDIF
ENDDO
RETURN n

2022-10-17 10:46
y12692189
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2021-9-23
收藏
得分:0 
回复 2楼 fyyylyl
我想依据我输入的开始结束时间来计算应该收多少钱,您这个只能计算两个时间段之间的月份,和我想的不太一样。
但是也很感谢您的回复。
2022-10-17 15:53
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:5 
给点数据,便于测试。

坚守VFP最后的阵地
2022-10-17 18:31
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1090
专家分:2682
注 册:2015-12-30
收藏
得分:5 
问题并不是算出两日期间有几个月就行,由于各年收费标准不同,所以要计算两日期间覆盖了哪些年
按楼主给出的例子,在一个自然年度内的标准是一样的,所以计算两头年份月数(用12-日期所在月+1),从而得到收费金额,中间年份按12*收费标准,累加可得出总收费金额
2022-10-18 07:57
fyyylyl
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:313
专家分:820
注 册:2006-5-22
收藏
得分:0 
PARAMETERS  date1,date2
CREATE CURSOR Cstan(sdate d,edate d,standard N(6,1))
INSERT INTO Cstan(sdate,edate,standard ) Value({^1990.1.1},{^1999.12.31},0.1)
INSERT INTO Cstan(sdate,edate,standard ) Value({^2000.1.1},{^2009.12.31},0.5)
INSERT INTO Cstan(sdate,edate,standard ) Value({^2010.1.1},{^2014.12.31},0.8)
INSERT INTO Cstan(sdate,edate,standard ) Value({^2015.1.1},DATE(),1.2)

IF date2<date1
    tmp_date=date1
    date1=date2
    date2=tmp_date
ENDIF
date1=date1-DAY(date1)+1        &&起始按月初
date2=GOMONTH(date2,1)-DAY(date2)    &&终止按月末

    nMoney=0
    n=0
DO WHILE .t.
    cur_date=GOMONTH(date1,n)
    IF cur_date<=date2
        SELECT standard FROM cstan  WHERE BETWEEN(cur_date,Sdate,Edate) INTO CURSOR tmp_stan
            nMoney=nMoney+standard
        USE
        n=n+1
    ELSE
        EXIT
    ENDIF
ENDDO
RETURN nMoney


2022-10-18 09:23
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:5 
解题思路:
1、先根据收物业费的起始时间确定适用哪个收费标准段;
2、再根据收费标准段的结束时间来计算应该收物业费的天数;
3、如果收物业费的结束时间大于此收费标准段则进入下一收费标准段,然后重复第2步;
4、分别显示各收费标准段的天数及收费金额以及合计金额。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2022-10-18 09:57
y12692189
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2021-9-23
收藏
得分:0 
回复 6楼 fyyylyl
您写的非常好,我测试了,确实没问题,我写的比您这个复杂,因为涉及到退费问题,再次表示感谢
2023-03-15 14:24
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
实际上计算两个日期之间共有多少个月份是可以用公式解决的
(YEAR(Date2) - YEAR(Date1)) * 12 + MONTH(Date2) - MONTH(Date1) + 1
其中 Date2 >= Date1
如:
2023-01-01 至 2023-01-01 结果=1个月
2022-12-01 至 2023-01-01 结果=2个月
2023-01-01 至 2023-03-01 结果=3个月
经验证上面的公式计算结果是正确的

坚守VFP最后的阵地
2023-03-15 22:59
快速回复:求助,如何分段计算月数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026104 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved