动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   数据库 → 阅读文章

 关于日期天数计算的函数

作者:无从考证 来源:转载 
阅读 2450 人次 , 2006-2-15 17:52:00 

今天早上突然要用到一个计算某月有多少天的函数,翻了半天没找到系统自带着中函数,于是动手写了一个,如下:
**返回某个月有多少天
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))) 即可
原理就是根据增加值来计算当月的下一个月超出几天,然后减去几天就是当月的最后一天了。   
 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:随机排序中的newid()问题
· 下一篇:不可小视视图对效率的影响力
· MySQL修改密码方法总结
· Oracle数据库技术(7)
· SQL Server 2005:这个螃蟹谁先吃
· MySQL简易备份方法
· Oracle数据库安全策略分析(一)


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077