关于日期天数计算的几个函数!
发表于:2007-07-02来源:作者:点击数:
标签:
关于日期天数计算的几个函数! 今天早上突然要用到一个计算某月有多少天的函数,翻了半天没找到系统自带着中函数,于是动手写了一个,如下: **返回某个月有多少天FUNCTION HowMonthDay() PARAMETERS cDate LOCAL Days as Integer ,Years as Integer IF !TYPE
关于日期天数计算的几个函数!
今天早上突然要用到一个计算某月有多少天的函数,翻了半天没找到系统自带着中函数,于是动手写了一个,如下:
**返回某个月有多少天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 DaysENDFUNC
后来郑宇大哥给我提供了一个返回月底的函数。如下:
PROCEDURE EDOM* FUNCTION: 返回本月月底* M.L.Y 1998.8.8PARAMETERS DATE_TODAYPRIVATE ALLSET DATE TO ANSISET CENTURY ONIF MONTH(DATE_TODAY) < 12 RETURN CTOD(STR(YEAR(DATE_TODAY),4,0) + "." ; + STR(MONTH(DATE_TODAY)+1,2,0) + ".01") - 1ELSE 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 DaysENDFUNC
其实最重要的只有一句:Days=DAY(cDate+(32-DAY(cDate))-DAY(cDate+(32-DAY(cDate))))也不用管闰年平年了,省事。
要是返回月底,那这句改为:cDate+(32-DAY(cDate))-DAY(cDate+(32-DAY(cDate))) 即可
原理就是根据增加值来计算当月的下一个月超出几天,然后减去几天就是当月的最后一天了。
原文转自:http://www.ltesting.net