首 页   |  资 讯   |   日 志   |   相 册   |   音 乐   |   下 载   |   朋友圈   |   论 坛   |   帮 助   |  
娱乐八封  |   灌水天堂  |   帖图专区  |   黑客攻防  |   IT业界新闻  |   网站安全讨论  |   网站推广  |   站长常用软件  |   信息发布专区  |   站长赚钱  |   域名交易与投资  |   主机质量大家评  |   网站建设源码  |   站长俱乐部  |   建站宝典  |   硬件专版  |   有问必答  |   电脑网络  |   设计天地  |   WAP建站技术交流  |   网络编程  |   网页设计  |   图形图象  |   数据库技术  |   服务器技术  |  
作者: 小贝   发表日期: 2007-05-19 17:09   复制链接
今天早上突然要用到一个计算某月有多少天的函数,翻了半天没找到系统自带着中函数,于是动手写了一个,如下:

**返回某个月有多少天
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))) 即可

原理就是根据增加值来计算当月的下一个月超出几天,然后减去几天就是当月的最后一天了。
  共0条回复
最新文章