關于日期天數計算的幾個函數!
今天早上突然要用到一個計算某月有多少天的函數,翻了半天沒找到系統自帶著中函數,于是動手寫了一個,如下:
**返回某個月有多少天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))) 即可
原理就是根據增加值來計算當月的下一個月超出幾天,然后減去幾天就是當月的最后一天了。