关于日期天数计算的函数(转)

今天早上突然要用到一个计算某月有多少天的函数,翻了半天没找到系统自带着中函数,于是动手写了一个,如下:
**返回某个月有多少天
FUNCTION HowMonthDay()
PARAMETERS cDate
LOCAL Days as Integer ,Years as Integer
IF !TYPE("cDate")=="D"
MESSAGEBOX("参数类型不正确,应该为日期型","系统提示!")
RETURN
ENDIF
Days=IIF(INLIST(MONTH(cDate),1,3,5,7,8,10,12),31,30)
**闰年计算方法
Years=YEAR(cDate)
IF MONTH(cDate)==2
Days = IIF(Years%400==0 OR (Years%4==0 AND Years%100<>0),29,28)
ENDIF
RETURN Days
ENDFUNC

后来郑宇大哥给我提供了一个返回月底的函数。如下:
PROCEDURE EDOM
* FUNCTION: 返回本月月底
* M.L.Y 1998.8.8
PARAMETERS DATE_TODAY
PRIVATE ALL
SET DATE TO ANSI
SET CENTURY ON
IF MONTH(DATE_TODAY) < 12
RETURN CTOD(STR(YEAR(DATE_TODAY),4,0) + "." ;
+ STR(MONTH(DATE_TODAY)+1,2,0) + ".01") - 1
ELSE
RETURN EDOY(DATE_TODAY)
ENDIF

思量了半天发现返回月底可能还要简单一点,我改进了一下:
cDate=Date()
??cDate+(32-DAY(cDate))-DAY(cDate+(32-DAY(cDate)))
最后用这个思路改进了一下返回某月有多少天的函数,如下:
FUNCTION HowMonthDay()
PARAMETERS cDate
LOCAL Days as Integer
IF !TYPE("cDate")=="D"
MESSAGEBOX("参数类型不正确,应该为日期型","系统提示!")
RETURN
ENDIF
Days=DAY(cDate+(32-DAY(cDate))-DAY(cDate+(32-DAY(cDate))))
RETURN Days
ENDFUNC
其实最重要的只有一句:Days=DAY(cDate+(32-DAY(cDate))-DAY(cDate+(32-DAY(cDate))))
也不用管闰年平年了,省事。
要是返回月底,那这句改为:cDate+(32-DAY(cDate))-DAY(cDate+(32-DAY(cDate))) 即可
原理就是根据增加值来计算当月的下一个月超出几天,然后减去几天就是当月的最后一天了。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7178747/viewspace-161527/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7178747/viewspace-161527/

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值