$PBExportHeader$nvo_datetime.sru $PBExportComments$日期时间操作类 forward global type nvo_datetime from nonvisualobject end type type stc_systemtime from structure within nvo_datetime end type end forward
type stc_systemtime from structure
integer wyear
integer wmonth
integer wdayofweek
integer wday
integer whour
integer wminute
integer wsecond
integer wmilliseconds
end type
global type nvo_datetime from nonvisualobject autoinstantiate
end type
type prototypes
Function long SetSystemTime(stc_systemtime lpSystemTime) Library "kernel32.dll"
end prototypes
forward prototypes
public function integer of_getdaysinmonth (date ad_date)
public function date of_getlastdayinmonth (date ad_date)
public function date of_getlastdayinmonth (integer ai_year, integer ai_month)
public function date of_getfirstdayinmonth (date ad_date)
public function date of_getfirstdayinmonth (integer ai_year, integer ai_month)
public function boolean of_isleapyear (date ad_date)
public function boolean of_isleapyear (integer ai_year)
public function boolean of_lsweekend (date ad_date)
public function date of_skipholidays (date ad_date, integer ai_increment)
public function date of_getnextworkday (datawindow adw_holidays, string as_columnname, date ad_date)
public function date of_getpreviousworkday (datawindow adw_holidays, string as_columnname, date ad_date)
public function date of_getpreviousworkday (date ad_date)
public function date of_getnextworkday (date ad_date)
public function date of_skipholidays (datastore ads_holidays, string as_columnname, date ad_date, integer ai_increment)
public function date of_skipholidays (datawindow adw_holidays, string as_columnname, date ad_date, integer ai_increment)
public function date of_getnextworkday (datastore ads_holidays, string as_columnname, date ad_date)
public function date of_getfirstworkday (datawindow adw_holidays, string as_columnname, date ad_date)
public function date of_getfirstworkday (datastore ads_holidays, string as_columnname, date ad_date)
public function date of_getpreviousworkday (datastore ads_holidays, string as_columnname, date ad_date)
public function date of_getfirstworkday (date ad_date)
public function date of_getlastworkday (datastore ads_holidays, string as_columnname, date ad_date)
public function date of_getlastworkday (datawindow adw_holidays, string as_columnname, date ad_date)
public function date of_getlastworkday (date ad_date)
public function integer of_getdaysinmonth ()
public function integer of_countdowinmonth (date ad_date, integer ai_dow)
public function integer of_countdowinmonth (date ad_date)
public function integer of_countworkdays (datawindow adw_holidays, string as_columnname, date ad_startdate, date ad_enddate)
public function date of_getfirstdayinweek (date ad_date)
public function date of_getlastdayinweek (date ad_date)
public function date of_getfirstdayinmonth ()
public function date of_getlastdayinmonth ()
public function date of_getfirstworkday ()
public function date of_getlastworkday ()
public function date of_getfirstdayinweek ()
public function date of_getlastdayinweek ()
public function date of_getnextworkday ()
public function date of_getpreviousworkday ()
public function integer of_countholidays (datawindow adw_holidays, string as_columnname, date ad_startdate, date ad_enddate)
public function integer of_countholidays (date ad_startdate, date ad_enddate)
public function integer of_countholidays (datastore ads_holidays, string as_columnname, date ad_startdate, date ad_enddate)
public function integer of_countworkdays (datastore ads_holidays, string as_columnname, date ad_startdate, date ad_enddate)
public function integer of_countworkdays (date ad_startdate, date ad_enddate)
public function integer of_getage (date ad_brithday, date ad_date)
public function long of_yearsafter (date ad_start, date ad_end)
public function long of_monthsafter (date ad_start, date ad_end)
public function long of_weeksafter (date ad_start, date ad_end)
public function long of_secondsafter (datetime adtm_start, datetime adtm_end)
public function long of_millisecsafter (time atm_start, time atm_end)
public function date of_relativemonth (date ad_source, integer al_month)
public function datetime of_relativedatetime (datetime adtm_start, integer al_offset)
public function integer of_getquarter (date ad_source)
public function integer of_getquarter ()
public function date of_getfirstdayinquarter (date ad_date)
public function date of_getfirstdayinquarter ()
public function date of_getlastdayinquarter (date ad_date)
public function date of_getlastdayinquarter ()
public function long of_countweeksinyear (date ad_source)
public function integer of_getdayinweek (date ad_source)
public function date of_getfirstdayinyear (date ad_date)
public function date of_getfirstdayinyear ()
public function date of_getfirstdayinyear (integer ai_year)
public function date of_getlastdayinyear (date ad_date)
public function date of_getlastdayinyear ()
public function date of_getlastdayinyear (integer ai_year)
public function integer of_countyeardays (date ad_date)
public function integer of_countyeardays ()
public function integer of_countyeardays (integer ai_year)
public function string of_getconstellation (date ad_date)
public function string of_getgenus (integer ai_year)
public function string of_convertdayoflunar (date ad_date)
public function datetime of_relativedatetime (datetime ad_datetime, long al_number, string as_kind)
public function string of_gettgdz (integer ai_year)
public function string of_gettgdz (date ad_date)
public function string of_gettgdz ()
public function boolean of_isleapyear ()
public function string of_getgenus (date ad_date)
public function string of_getgenus ()
public function integer of_countdowinmonth ()
public function integer of_getage (date ad_brithday)
public function integer of_countdowinmonth (integer ai_dow)
public function long of_countweeksinyear ()
public function boolean of_setsystemtime (datetime adt_datetime)
end prototypes
public function integer of_getdaysinmonth (date ad_date);/*函数功能:获取指定日期所在月份的天数
返回值:integer 指定日期所在月份的天数
参数:ad_date date 日期*/
return integer(28+integer(mid('3'+string(abs(sign(mod(sign(mod(abs(year(ad_date)),4))+sign(mod(abs(year(ad_date)),100))+sign(mod(abs(year(ad_date)),400)),2)) -1))+'3232332323',month(ad_date),1)))
end function
public function date of_getlastdayinmonth (date ad_date);/*函数功能:获取指定日期所在月份的最后一天
返回值:date 指定日期所在月份的最后一天
参数:ad_date date 日期*/
return date(year(ad_date),month(ad_date),integer(28+integer(mid('3'+string(abs(sign(mod(sign(mod(abs(year(ad_date)),4))+sign(mod(abs(year(ad_date)),100))+sign(mod(abs(year(ad_date)),400)),2)) -1))+'3232332323',month(ad_date),1))))
end function
public function date of_getlastdayinmonth (integer ai_year, integer ai_month);/*函数功能:获取指定年份,月份的最后一天
返回值:date 指定年份,月份的最后一天
参数:integer ai_year 年份
integer ai_month 月份*/
date ld_date
ld_date=date(ai_year,ai_month,1)
return date(year(ld_date),month(ld_date),integer(28+integer(mid('3'+string(abs(sign(mod(sign(mod(abs(year(ld_date)),4))+sign(mod(abs(year(ld_date)),100))+sign(mod(abs(year(ld_date)),400)),2)) -1))+'3232332323',month(ld_date),1))))
end function
public function date of_getfirstdayinmonth (date ad_date);/*函数功能:获取指定日期所在月份的第一天
返回值:date 指定日期所在月份的第一天
参数:date ad_date 日期 */
return date(year(ad_date),month(ad_date),1)
end function
public function date of_getfirstdayinmonth (integer ai_year, integer ai_month);/*函数功能:获取指定年份,月份的第一天
返回值:date 指定年份,月份的第一天
参数:integer ai_year 年份
integer ai_month 月份*/
return date(ai_year,ai_month,1)
end function
public function boolean of_isleapyear (date ad_date);/*函数功能:获取指定日期所在年份是否为闰年
返回值:boolean 指定日期所在年份是否为闰年,true为是闰年,false为平年
参数:ad_date date 日期*/
integer li_year
li_year=year(ad_date)
return abs(sign(mod(sign(mod(abs(li_year),4))+sign(mod(abs(li_year),100))+sign(mod(abs(li_year),400)),2)) -1)=1
end function
public function boolean of_isleapyear (integer ai_year);/*函数功能:获取指定年份是否为闰年
返回值:boolean 指定年份是否为闰年,true为是闰年,false为平年
参数:ai_year integer 年份*/
return abs(sign(mod(sign(mod(abs(ai_year),4))+sign(mod(abs(ai_year),100))+sign(mod(abs(ai_year),400)),2)) -1)=1
end function
public function boolean of_lsweekend (date ad_date);/*函数功能:获取指定日期是否为周末
返回值:date 指定日期是否为周末
参数:ad_date date 日期*/
string ls_week
ls_week=dayname(ad_date)
choose case dayname(ad_date)
case "Saturday","Sunday"
return true
case else
return false
end choose
end function
public function date of_skipholidays (date ad_date, integer ai_increment);/*函数功能:获取指定日期跳过周末的下一个日期
返回值:date 返回指定的指定日期跳过周末的下一个日期
参数:ad_date date 日期
ai_increment integer 指定的跳过天数 */
date ld_date
ld_date=ad_date
do while of_lsweekend(ld_date)=true
ld_date=RelativeDate ( ld_date, ai_increment )
loop
return ld_date
end function
public function date of_getnextworkday (datawindow adw_holidays, string as_columnname, date ad_date);/*函数功能:获取指定日期跳过周末和节假日的下一个工作日
返回值:date 返回指定的指定日期跳过周末的下一个工作日
参数:adw_holidays datawindow存储指定节假日的数据窗口
as_columnname string 数据窗口中存储节假日的列名
ad_date date 日期
*/
return of_skipholidays(adw_holidays,as_columnname,RelativeDate (ad_date,1),1)
end function
public function date of_getpreviousworkday (datawindow adw_holidays, string as_columnname, date ad_date);/*函数功能:获取指定日期跳过周末和节假日的上一个工作日
返回值:date 返回指定的指定日期跳过周末的上一个工作日
参数:adw_holidays datawindow存储指定节假日的数据窗口
as_columnname string 数据窗口中存储节假日的列名
ad_date date 日期
*/
return of_skipholidays(adw_holidays,as_columnname,RelativeDate (ad_date,-1),-1)
end function
public function date of_getpreviousworkday (date ad_date);/*函数功能:获取指定日期跳过周末的上一个工作日
返回值:date 返回指定的指定日期跳过周末的上一个工作日
参数: ad_date date 日期 */
return of_skipholidays(RelativeDate (ad_date,-1),-1)
end function
public function date of_getnextworkday (date ad_date);/*函数功能:获取指定日期跳过周末的下一个工作日
返回值:date 返回指定的指定日期跳过周末的下一个工作日
参数: ad_date date 日期 */
return of_skipholidays(RelativeDate (ad_date,1),1)
end function
public function date of_skipholidays (datastore ads_holidays, string as_columnname, date ad_date, integer ai_increment);/*函数功能:获取指定日期跳过周末和节假日的下一个日期
返回值:date 返回指定的指定日期跳过周末和节假日的下一个日期
参数:adw_holidays datastore存储指定节假日的数据存储对象
as_columnname string 数据窗口中存储节假日的列名
ad_date date 日期
ai_increment integer 指定的跳过天数
*/
date ld_date
ld_date=ad_date
do while of_lsweekend(ld_date)=true or ads_holidays.find("string("+as_columnname+",'yyyy-mm-dd')"+"='"+string(ld_date,"yyyy-mm-dd")+"'",1,ads_holidays.rowcount())<>0
ld_date=RelativeDate ( ld_date, ai_increment )
loop
return ld_date
end function
public function date of_skipholidays (datawindow adw_holidays, string as_columnname, date ad_date, integer ai_increment);/*函数功能:获取指定日期跳过周末和节假日的下一个日期
返回值:date 返回指定的指定日期跳过周末和节假日的下一个日期
参数:adw_holidays datawindow存储指定节假日的数据窗口
as_columnname string 数据窗口中存储节假日的列名
ad_date date 日期
ai_increment integer 指定的跳过天数
*/
date ld_date
ld_date=ad_date
do while of_lsweekend(ld_date)=true or adw_holidays.find("string("+as_columnname+",'yyyy-mm-dd')"+"='"+string(ld_date,"yyyy-mm-dd")+"'",1,adw_holidays.rowcount())<>0
ld_date=RelativeDate ( ld_date, ai_increment )
loop
return ld_date
end function
public function date of_getnextworkday (datastore ads_holidays, string as_columnname, date ad_date);/*函数功能:获取指定日期跳过周末和节假日的下一个工作日
返回值:date 返回指定的指定日期跳过周末的下一个工作日
参数:ads_holidays datastore存储指定节假日的数据存储对象
as_columnname string 数据窗口中存储节假日的列名
ad_date date 日期
*/
return of_skipholidays(ads_holidays,as_columnname,RelativeDate (ad_date,1),1)
end function
public function date of_getfirstworkday (datawindow adw_holidays, string as_columnname, date ad_date);/*函数功能:获取指定日期所在月的第一个工作日
返回值:date 返回指定日期所在月的第一个工作日
参数:adw_holidays datawindow存储指定节假日的数据存储对象
as_columnname string 数据窗口中存储节假日的列名
ad_date date 日期
*/
date d_temp
d_temp=date(year(ad_date),month(ad_date),1)
return of_skipholidays(adw_holidays,as_columnname,d_temp,1)
end function
public function date of_getfirstworkday (datastore ads_holidays, string as_columnname, date ad_date);/*函数功能:获取指定日期所在月的第一个工作日
返回值:date 返回指定日期所在月的第一个工作日
参数:ads_holidays datastore存储指定节假日的数据存储对象
as_columnname string 数据窗口中存储节假日的列名
ad_date date 日期
*/
date d_temp
d_temp=date(year(ad_date),month(ad_date),1)
return of_skipholidays(ads_holidays,as_columnname,d_temp,1)
end function
public function date of_getpreviousworkday (datastore ads_holidays, string as_columnname, date ad_date);/*函数功能:获取指定日期跳过周末和节假日的上一个工作日
返回值:date 返回指定的指定日期跳过周末的上一个工作日
参数:ads_holidays datastore存储指定节假日的数据存储对象
as_columnname string 数据窗口中存储节假日的列名
ad_date date 日期
*/
return of_skipholidays(ads_holidays,as_columnname,RelativeDate (ad_date,-1),-1)
end function
public function date of_getfirstworkday (date ad_date);/*函数功能:获取指定日期所在月的第一个工作日
返回值:date 返回指定日期所在月的第一个工作日
参数: ad_date date 日期 */
date d_temp
d_temp=date(year(ad_date),month(ad_date),1)
return of_skipholidays(d_temp,1)
end function
public function date of_getlastworkday (datastore ads_holidays, string as_columnname, date ad_date);/*函数功能:获取指定日期所在月的最后一个工作日
返回值:date 返回指定日期所在月的最后一个工作日
参数:ads_holidays datastore存储指定节假日的数据存储对象
as_columnname string 数据窗口中存储节假日的列名
ad_date date 日期
*/
date d_temp
d_temp=of_getlastdayinmonth(ad_date)
return of_skipholidays(ads_holidays,as_columnname,d_temp,-1)
end function
public function date of_getlastworkday (datawindow adw_holidays, string as_columnname, date ad_date);/*函数功能:获取指定日期所在月的最后一个工作日
返回值:date 返回指定日期所在月的最后一个工作日
参数:adw_holidays datawindow存储指定节假日的数据窗口
as_columnname string 数据窗口中存储节假日的列名
ad_date date 日期
*/
date d_temp
d_temp=of_getlastdayinmonth(ad_date)
return of_skipholidays(adw_holidays,as_columnname,d_temp,-1)
end function
public function date of_getlastworkday (date ad_date);/*函数功能:获取指定日期所在月的最后一个工作日
返回值:date 返回指定日期所在月的最后一个工作日
参数: ad_date date 日期 */
date d_temp
d_temp=of_getlastdayinmonth(ad_date)
return of_skipholidays(d_temp,-1)
end function
public function integer of_getdaysinmonth ();/*函数功能:获取指定日期所在月份的天数
返回值:integer 指定日期所在月份的天数
参数:ad_date date 日期*/
return integer(28+integer(mid('3'+string(abs(sign(mod(sign(mod(abs(year(today())),4))+sign(mod(abs(year(today())),100))+sign(mod(abs(year(today())),400)),2)) -1))+'3232332323',month(today()),1)))
end function
public function integer of_countdowinmonth (date ad_date, integer ai_dow);/*函数功能:获取指定日期所在月份的指定星期几的天数
返回值:integer 指定日期所在月份的指定星期几的天数
参数:ad_date date 日期
ai_dow integer 指定的星期几 1代表星期天......7代表星期六*/
date d_first
integer intcount,intmonth
if(ai_dow<1 or ai_dow>7) then
ai_dow=daynumber(ad_date)
end if
intmonth=month(ad_date)
d_first=date(year(ad_date),month(ad_date),1)
do while daynumber(d_first)<>ai_dow
d_first=relativedate(d_first,1)
loop
intcount=0
do while month(d_first)=intmonth
intcount=intcount+1
d_first=relativedate(d_first,7)
loop
return intcount
end function
public function integer of_countdowinmonth (date ad_date);/*函数功能:获取指定日期所在月份的星期一的天数
返回值:integer 指定日期所在月份的星期一的天数
参数:ad_date date 日期*/
return of_countdowinmonth(ad_date,2)
end function
public function integer of_countworkdays (datawindow adw_holidays, string as_columnname, date ad_startdate, date ad_enddate);/*函数功能:获取指定日期之间的工作日天数
返回值:工作日天数
参数:adw_holidays datawindow存储指定节假日的数据窗口
as_columnname string 数据窗口中存储节假日的列名
ad_startdate date 开始日期
ad_enddate date 结束日期 */
integer intdays,li_return
date d_temp
integer intsubstract
if ad_enddate
1<ad_startdate ad_enddate="of_skipholidays(adw_holidays,as_columnname,ad_enddate,-1)" ad_startdate="" d_temp="ad_startdate" end="" if="" then="">ad_enddate then
2 li_return=0
3 else
4 intdays=DaysAfter (ad_startdate, ad_enddate )+1
5 intsubstract=intsubstract+of_countholidays(adw_holidays,as_columnname,ad_startdate,ad_enddate)
6 end if
7 li_return=intdays - intsubstract
8 return li_return
9 end function
10
11 public function date of_getfirstdayinweek (date ad_date);/*函数功能:获取指定日期所在周的第一天
12 返回值:date 返回指定日期所在周的第一天
13 参数:ad_date date 日期 */
14 date ld_return
15 ld_return=RelativeDate (ad_date, 1 - daynumber(ad_date))
16 return ld_return
17 end function
18
19 public function date of_getlastdayinweek (date ad_date);/*函数功能:获取指定日期所在周的最后一天
20 返回值:date 返回指定日期所在周的最后一天
21 参数:ad_date date 日期 */
22 date ld_return
23 ld_return=RelativeDate (ad_date, 7 - daynumber(ad_date))
24 return ld_return
25 end function
26
27 public function date of_getfirstdayinmonth ();/*函数功能:获取当前日期所在月份的第一天
28 返回值:date 当前日期所在月份的第一天
29 参数:date ad_date 日期 */
30 return date(year(today()),month(today()),1)
31 end function
32
33 public function date of_getlastdayinmonth ();/*函数功能:获取当前日期所在月份的最后一天
34 返回值:date 当前日期所在月份的最后一天*/
35 return date(year(today()),month(today()),integer(28+integer(mid('3'+string(abs(sign(mod(sign(mod(abs(year(today())),4))+sign(mod(abs(year(today())),100))+sign(mod(abs(year(today())),400)),2)) -1))+'3232332323',month(today()),1))))
36 end function
37
38 public function date of_getfirstworkday ();/*函数功能:获取当前日期所在月的第一个工作日
39 返回值:date 返回当前日期所在月的第一个工作日 */
40 date d_temp
41 d_temp=date(year(today()),month(today()),1)
42 return of_skipholidays(d_temp,1)
43 end function
44
45 public function date of_getlastworkday ();/*函数功能:获取当前日期所在月的最后一个工作日
46 返回值:date 返回当前日期所在月的最后一个工作日 */
47 date d_temp
48 d_temp=of_getlastdayinmonth(today())
49 return of_skipholidays(d_temp,-1)
50 end function
51
52 public function date of_getfirstdayinweek ();/*函数功能:获取当前日期所在周的第一天
53 返回值:date 返回当前日期所在周的第一天
54 参数:ad_date date 日期 */
55 date ld_return
56 ld_return=RelativeDate (today(), 1 - daynumber(today()))
57 return ld_return
58 end function
59
60 public function date of_getlastdayinweek ();/*函数功能:获取指定日期所在周的最后一天
61 返回值:date 返回指定日期所在周的最后一天*/
62 date ld_return
63 ld_return=RelativeDate (today(), 7 - daynumber(today()))
64 return ld_return
65 end function
66
67 public function date of_getnextworkday ();/*函数功能:获取当前日期跳过周末的下一个工作日
68 返回值:date 返回当前的指定日期跳过周末的下一个工作日 */
69 return of_skipholidays(RelativeDate (today(),1),1)
70 end function
71
72 public function date of_getpreviousworkday ();/*函数功能:获取当前日期跳过周末的上一个工作日
73 返回值:date 返回当前日期跳过周末的上一个工作日 */
74 return of_skipholidays(RelativeDate (today(),-1),-1)
75 end function
76
77 public function integer of_countholidays (datawindow adw_holidays, string as_columnname, date ad_startdate, date ad_enddate);/*函数功能:获取指定日期之间的节假日天数
78 返回值:节假日天数
79 参数:adw_holidays datawindow存储指定节假日的数据窗口
80 as_columnname string 数据窗口中存储节假日的列名
81 ad_startdate date 开始日期
82 ad_enddate date 结束日期 */
83 integer li_return
84 date ld_date
85 ld_date=ad_startdate
86 do while ld_date<=ad_enddate
87 if of_lsweekend(ld_date)=true or adw_holidays.find("string("+as_columnname+",'yyyy-mm-dd')"+"='"+string(ld_date,"yyyy-mm-dd")+"'",1,adw_holidays.rowcount())=0 then
88 li_return++
89 end if
90 ld_date=relativedate(ld_date,1)
91 loop
92 return li_return
93 end function
94
95 public function integer of_countholidays (date ad_startdate, date ad_enddate);/*函数功能:获取指定日期之间的节假日天数
96 返回值:节假日天数
97 参数:ad_startdate date 开始日期
98 ad_enddate date 结束日期 */
99 integer li_return
100 date ld_date
101 ld_date=ad_startdate
102 do while ld_date<=ad_enddate
103 if of_lsweekend(ld_date)=true then
104 li_return++
105 end if
106 ld_date=relativedate(ld_date,1)
107 loop
108 return li_return
109 end function
110
111 public function integer of_countholidays (datastore ads_holidays, string as_columnname, date ad_startdate, date ad_enddate);/*函数功能:获取指定日期之间的节假日天数
112 返回值:节假日天数
113 参数:ads_holidays datastore存储指定节假日的数据存储对象
114 as_columnname string 数据窗口中存储节假日的列名
115 ad_startdate date 开始日期
116 ad_enddate date 结束日期 */
117 integer li_return
118 date ld_date
119 ld_date=ad_startdate
120 do while ld_date<=ad_enddate
121 if of_lsweekend(ld_date)=true or ads_holidays.find("string("+as_columnname+",'yyyy-mm-dd')"+"='"+string(ld_date,"yyyy-mm-dd")+"'",1,ads_holidays.rowcount())=0 then
122 li_return++
123 end if
124 ld_date=relativedate(ld_date,1)
125 loop
126 return li_return
127 end function
128
129 public function integer of_countworkdays (datastore ads_holidays, string as_columnname, date ad_startdate, date ad_enddate);/*函数功能:获取指定日期之间的工作日天数
130 返回值:工作日天数
131 参数:ads_holidays datastroe存储指定节假日的数据存储对象
132 as_columnname string 数据窗口中存储节假日的列名
133 ad_startdate date 开始日期
134 ad_enddate date 结束日期 */
135 integer intdays,li_return
136 date d_temp
137 integer intsubstract
138 if ad_enddate<ad_startdate ad_enddate="of_skipholidays(ads_holidays,as_columnname,ad_enddate,-1)" ad_startdate="" d_temp="ad_startdate" end="" if="" then="">ad_enddate then
139 li_return=0
140 else
141 intdays=DaysAfter (ad_startdate, ad_enddate )+1
142 intsubstract=intsubstract+of_countholidays(ads_holidays,as_columnname,ad_startdate,ad_enddate)
143 end if
144 li_return=intdays - intsubstract
145 return li_return
146 end function
147
148 public function integer of_countworkdays (date ad_startdate, date ad_enddate);/*函数功能:获取指定日期之间的工作日天数
149 返回值:工作日天数
150 参数:ad_startdate date 开始日期
151 ad_enddate date 结束日期 */
152 integer intdays,li_return
153 date d_temp
154 integer intsubstract
155 if ad_enddate<ad_startdate ad_enddate="of_skipholidays(ad_enddate,-1)" ad_startdate="" d_temp="ad_startdate" end="" if="" then="">ad_enddate then
156 li_return=0
157 else
158 intdays=DaysAfter (ad_startdate, ad_enddate )+1
159 intsubstract=intsubstract+of_countholidays(ad_startdate,ad_enddate)
160 end if
161 li_return=intdays - intsubstract
162 return li_return
163 end function
164
165 public function integer of_getage (date ad_brithday, date ad_date);/*函数作用:获取指定生日到指定日期的年纪
166 函数返回值:integer 指定生日到指定日期的年纪
167 参数:date ad_brithday 出生日期
168 date ad_date 指定日期*/
169 integer li_age
170 date ld_temp
171 if ad_brithday>ad_date then
172 ld_temp=ad_brithday
173 ad_brithday=ad_date
174 ad_date=ld_temp
175 end if
176 li_age=of_yearsafter(ad_brithday,ad_date)
177 if ad_date<date(year(ad_date),month(ad_brithday),day(ad_brithday)) (date="" (ll_null)="" *函数用途:获取指定日期之间的相差年度="" -="" 1="" ad_end="" ad_end);="" ad_start="" ad_start,="" adb_end="" adb_start,="" date="" double="" end="" function="" if="" int="" isnull(ad_end)="" isnull(ad_start)="" ld_temp="" li_age="" li_mult="" li_year,="" ll_null="" long="" of_yearsafter="" or="" public="" return="" setnull="" then="" 参数:date="" 开始日期="" 相差年度="" 结束日期*="" 返回值:long=""> ad_end Then
178 ld_temp = ad_start
179 ad_start = ad_end
180 ad_end = ld_temp
181 li_mult = -1
182 else
183 li_mult = 1
184 End If
185 li_year = year(ad_end) - year(ad_start)
186 adb_start = month(ad_start)
187 adb_start = adb_start + day(ad_start) / 100
188 adb_end = month(ad_end)
189 adb_end = adb_end + day(ad_end) / 100
190 If adb_start > adb_end Then
191 li_year --
192 End If
193 Return li_year * li_mult
194
195 end function
196
197 public function long of_monthsafter (date ad_start, date ad_end);/* 描述: 两个日期之间的月份间隔
198 返回: 两个日期之间的月份间隔
199 参数:date ad_start 开始日期
200 date ad_end 结束日期 */
201 date ld_temp
202 integer li_month
203 integer li_mult
204
205 If IsNull(ad_start) or IsNull(ad_end) Then
206 long ll_null
207 SetNull(ll_null)
208 Return ll_null
209 End If
210 If ad_start > ad_end Then
211 ld_temp = ad_start
212 ad_start = ad_end
213 ad_end = ld_temp
214 li_mult = -1
215 else
216 li_mult = 1
217 End If
218 li_month = (year(ad_end) - year(ad_start) ) * 12
219 li_month = li_month + month(ad_end) - month(ad_start)
220
221 If day(ad_start) > day(ad_end) Then
222 li_month --
223 End If
224 Return li_month * li_mult
225 end function
226
227 public function long of_weeksafter (date ad_start, date ad_end);/*函数用途:获取指定日期之间的相差星期数
228 返回值:long 相差星期数
229 参数:date ad_start 开始日期
230 date ad_end 结束日期*/
231 If IsNull(ad_start) or IsNull(ad_end) Then
232 long ll_null
233 SetNull(ll_null)
234 Return ll_null
235 End If
236 Return Daysafter(ad_start,ad_end) /7
237 end function
238
239 public function long of_secondsafter (datetime adtm_start, datetime adtm_end);/*函数用途:获取指定日期之间的相差分钟数
240 返回值:long 相差分钟数
241 参数:datetime adtm_start 开始时间
242 datetime adtm_end 结束时间*/
243 long ll_total_seconds, ll_day_adjust
244 date ld_sdate, ld_edate
245 time lt_stime, lt_etime
246 If IsNull(adtm_start) or IsNull(adtm_end) Then
247 long ll_null
248 SetNull(ll_null)
249 Return ll_null
250 End If
251 ld_sdate = date(adtm_start)
252 ld_edate = date(adtm_end)
253 lt_stime = time(adtm_start)
254 lt_etime = time(adtm_end)
255 If ld_sdate = ld_edate then
256 ll_total_seconds = secondsafter( lt_stime,lt_etime)
257 Elseif ld_sdate < ld_edate Then
258 ll_total_seconds = SecondsAfter(lt_stime,Time('23:59:59'))
259 ll_day_adjust = DaysAfter(ld_sdate,ld_edate) -1
260 If ll_day_adjust > 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
261 ll_total_seconds = ll_total_seconds + SecondsAfter(Time('00:00:00'),lt_etime) +1
262 Else
263 ll_total_seconds = SecondsAfter(lt_stime,Time('00:00:00'))
264 ll_day_adjust = DaysAfter(ld_sdate,ld_edate) +1
265 If ll_day_adjust < 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
266 ll_total_seconds = ll_total_seconds + SecondsAfter(Time('23:59:59'),lt_etime) -1
267 end If
268
269 return ll_total_seconds
270
271 end function
272
273 public function long of_millisecsafter (time atm_start, time atm_end);/*函数用途:获取指定时间之间的相差秒数
274 返回值:long 相差相差秒数
275 参数:time atm_start 开始时间
276 time atm_end 结束时间*/
277 Long ll_start, ll_end
278 Long ll_temp
279 If IsNull(atm_start) or IsNull(atm_end) Then
280 long ll_null
281 SetNull(ll_null)
282 Return ll_null
283 End If
284 ll_start = Long (String (atm_start,"fff"))
285 ll_temp = Second(atm_start) * 1000
286 ll_start = ll_start + ll_temp
287 ll_temp = Minute(atm_start) * 60000
288 ll_start = ll_start + ll_temp
289 ll_temp = hour(atm_start) * 3600000
290 ll_start = ll_start + ll_temp
291 ll_end = Long (String (atm_end,"fff"))
292 ll_temp = Second(atm_end) * 1000
293 ll_end = ll_end + ll_temp
294 ll_temp = minute(atm_end) * 60000
295 ll_end = ll_end + ll_temp
296 ll_temp = hour(atm_end) * 3600000
297 ll_end = ll_end + ll_temp
298 return ll_end - ll_start
299 end function
300
301 public function date of_relativemonth (date ad_source, integer al_month);/*函数功能:返回指定日期相差指定月份后的日期
302 返回值:date 指定日期相差指定月份后的日期
303 参数:date ad_source 初始日期
304 integer al_month 月数*/
305 integer li_adjust_months, li_adjust_years
306 integer li_month, li_year, li_day
307 integer li_temp_month
308 If IsNull(ad_source) or IsNull(al_month) Then
309 date ldt_null
310 SetNull(ldt_null)
311 Return ldt_null
312 End If
313 li_adjust_months = mod(al_month, 12)
314 li_adjust_years = (al_month / 12)
315 li_temp_month = Month(ad_source) + li_adjust_months
316 If li_temp_month > 12 Then
317 li_month = li_temp_month - 12
318 li_adjust_years ++
319 ElseIf li_temp_month <= 0 Then
320 li_month = li_temp_month + 12
321 li_adjust_years --
322 Else
323 li_month = li_temp_month
324 End If
325 li_year = Year(ad_source) + li_adjust_years
326 li_day = Day(ad_source)
327 Do While li_day > 0
328 li_day --
329 Loop
330 Date ld_Ret
331 ld_Ret = Date(li_year, li_month, li_day)
332 Return ld_Ret
333 end function
334
335 public function datetime of_relativedatetime (datetime adtm_start, integer al_offset);/*函数功能:返回指定时间相差指定秒数后的时间
336 返回值:datetime 指定时间相差指定秒数后的时间
337 参数:datetime adtm_start 初始时间
338 integer al_month 秒数*/
339 datetime ldt_null
340 date ld_sdate
341 time lt_stime
342 long ll_date_adjust
343 long ll_time_adjust, ll_time_test
344 If IsNull(adtm_start) or IsNull(al_offset) Then
345 SetNull(ldt_null)
346 Return ldt_null
347 End If
348 ld_sdate = date(adtm_start)
349 lt_stime = time(adtm_start)
350 ll_date_adjust = al_offset / 86400
351 ll_time_adjust = mod(al_offset, 86400)
352 ld_sdate = RelativeDate(ld_sdate, ll_date_adjust)
353 If ll_time_adjust > 0 then
354 ll_time_test = SecondsAfter(lt_stime,time('23:59:59'))
355 If ll_time_test < ll_time_adjust Then
356 ld_sdate = RelativeDate(ld_sdate,1)
357 ll_time_adjust = ll_time_adjust - ll_time_test -1
358 lt_stime = time('00:00:00')
359 End If
360 lt_stime = RelativeTime(lt_stime, ll_time_adjust)
361 ElseIf ll_time_adjust < 0 then
362 ll_time_test = SecondsAfter(lt_stime,time('00:00:00'))
363 If ll_time_test > ll_time_adjust Then
364 ld_sdate = RelativeDate(ld_sdate,-1)
365 ll_time_adjust = ll_time_adjust - ll_time_test +1
366 lt_stime = time('23:59:59')
367 End If
368 lt_stime = RelativeTime(lt_stime, ll_time_adjust)
369 End If
370 return(datetime(ld_sdate,lt_stime))
371 end function
372
373 public function integer of_getquarter (date ad_source);/*函数功能:获得指定日期所在的季度
374 返回值:integer 指定日期所在的季度
375 参数:date ad_source日期*/
376 IF IsNull(ad_source) THEN
377 Long ll_null
378 SetNull(ll_null)
379 Return ll_null
380 END IF
381 Integer li_Month , li_Quarter
382 li_Month = Month(ad_Source)
383 li_Quarter = (li_Month -1)/3
384 Return li_Quarter
385
386 end function
387
388 public function integer of_getquarter ();/*函数功能:获得当前日期所在的季度
389 返回值:integer 当前日期所在的季度*/
390 Integer li_Month , li_Quarter
391 li_Month = Month(today())
392 li_Quarter = (li_Month -1)/3
393 Return li_Quarter
394
395 end function
396
397 public function date of_getfirstdayinquarter (date ad_date);/*函数用途:获取指定日期所在的季度的第一天
398 返回值:date 指定日期所在的季度的第一天
399 参数:date ad_date 指定日期*/
400 date ld_return
401 constant integer li_monthsinquarter=3
402 ld_return=date(year(ad_date),int((month(ad_date) - 1)/li_monthsinquarter)*li_monthsinquarter+1,1)
403 return ld_return
404 end function
405
406 public function date of_getfirstdayinquarter ();/*函数用途:获取当前日期所在的季度的第一天
407 返回值:date 当前日期所在的季度的第一天*/
408 date ld_return
409 constant integer li_monthsinquarter=3
410 ld_return=date(year(today()),int((month(today()) - 1)/li_monthsinquarter)*li_monthsinquarter+1,1)
411 return ld_return
412 end function
413
414 public function date of_getlastdayinquarter (date ad_date);/*函数用途:获取指定日期所在的季度的最后一天
415 返回值:date 指定日期所在的季度的最后一天
416 参数:date ad_date 指定日期*/
417 date ld_return
418 constant integer li_monthsinquarter=3
419 ld_return=date(year(ad_date),int((month(ad_date) - 1)/li_monthsinquarter)*li_monthsinquarter+(li_monthsinquarter+1),integer(28+integer(mid('3'+string(abs(sign(mod(sign(mod(abs(year(ad_date)),4))+sign(mod(abs(year(ad_date)),100))+sign(mod(abs(year(ad_date)),400)),2)) -1))+'3232332323',month(ad_date),1))))
420 return ld_return
421 end function
422
423 public function date of_getlastdayinquarter ();/*函数用途:获取当前日期所在的季度的最后一天
424 返回值:date 当前日期所在的季度的最后一天*/
425 date ld_return
426 constant integer li_monthsinquarter=3
427 ld_return=date(year(today()),int((month(today()) - 1)/li_monthsinquarter)*li_monthsinquarter+(li_monthsinquarter+1),integer(28+integer(mid('3'+string(abs(sign(mod(sign(mod(abs(year(today())),4))+sign(mod(abs(year(today())),100))+sign(mod(abs(year(today())),400)),2)) -1))+'3232332323',month(today()),1))))
428 return ld_return
429 end function
430
431 public function long of_countweeksinyear (date ad_source);/*函数用途:获取指定日期所在年份的星期数
432 返回值:long 返回日期所在年份的星期数
433 参数:date ad_source 指定日期*/
434 date ld_first_ofyear
435 integer li_weeknumber
436 integer li_leftover_days
437 If IsNull(ad_source) Then
438 long ll_null
439 SetNull(ll_null)
440 Return ll_null
441 End If
442 ld_first_ofyear = Date(Year(ad_source), 1, 1)
443 li_weeknumber = of_WeeksAfter (ld_first_ofyear, ad_source) + 1
444 li_leftover_days = Mod(DaysAfter (ld_first_ofyear, ad_source), 7)
445 If (of_getdayinweek(ld_first_ofyear) + li_leftover_days) >= 8 then
446 li_weeknumber ++
447 End If
448 Return li_weeknumber
449 end function
450
451 public function integer of_getdayinweek (date ad_source);// 描述: 决定日期是星期几,以星期天作为一个星期的第一天
452 // 参数:
453 // [value] date ad_source <描述>
454 // 返回: (INTEGER)
455 // 1 - If the Day is Sunday.
456 // 2 - If the Day is Monday
457 // 3 - If the Day is Tuesday.
458 // 4 - If the Day is Wednesday.
459 // 5 - If the Day is Thursday.
460 // 6 - If the Day is Friday.
461 // 7 - If the Day is Saturday.
462 // If any argument's value is NULL, function returns NULL.
463 //
464 If IsNull(ad_source) Then
465 long ll_null
466 SetNull(ll_null)
467 Return ll_null
468 End If
469 return DayNumber (ad_source)
470
471 end function
472
473 public function date of_getfirstdayinyear (date ad_date);/*函数功能:获取指定日期所在年份的第一天
474 返回值:date 指定日期所在年份的第一天
475 参数:date ad_date 日期 */
476 return date(year(ad_date),1,1)
477 end function
478
479 public function date of_getfirstdayinyear ();/*函数功能:获取当前日期所在年份的第一天
480 返回值:date 当前日期所在年份的第一天
481 参数:date ad_date 日期 */
482 return date(year(today()),1,1)
483 end function
484
485 public function date of_getfirstdayinyear (integer ai_year);/*函数功能:获取指定年份的第一天
486 返回值:date 指定年份的第一天
487 参数:date ad_date 日期 */
488 return date(ai_year,1,1)
489 end function
490
491 public function date of_getlastdayinyear (date ad_date);/*函数功能:获取指定日期所在年份的最后一天
492 返回值:date 指定日期所在年份的最后一天
493 参数:date ad_date 日期 */
494 return date(year(ad_date),12,31)
495 end function
496
497 public function date of_getlastdayinyear ();/*函数功能:获取当前日期所在年份的最后一天
498 返回值:date 当前日期所在年份的最后一天
499 参数:date ad_date 日期 */
500 return date(year(today()),12,31)
501 end function
502
503 public function date of_getlastdayinyear (integer ai_year);/*函数功能:获取指定日期所在年份的最后一天
504 返回值:date 指定日期所在年份的最后一天
505 参数:integer ai_year 年份 */
506 return date(ai_year,12,31)
507 end function
508
509 public function integer of_countyeardays (date ad_date);/*函数用途:获取指定日期所在年份的天数
510 函数返回值:integer 天数
511 参数:date ad_date 日期*/
512 return daysafter(of_getfirstdayinyear(ad_date),of_getlastdayinyear(ad_date))
513 end function
514
515 public function integer of_countyeardays ();/*函数用途:获取当前日期所在年份的天数
516 函数返回值:integer 天数*/
517 return daysafter(of_getfirstdayinyear(),of_getlastdayinyear())
518 end function
519
520 public function integer of_countyeardays (integer ai_year);/*函数用途:获取指定年份的天数
521 函数返回值:integer 天数
522 参数:integer ai_year 年份*/
523 return daysafter(of_getfirstdayinyear(ai_year),of_getlastdayinyear(ai_year))
524 end function
525
526 public function string of_getconstellation (date ad_date);/*函数用途:返回指定日期所在星座
527 返回值:string 指定日期所在星座
528 参数:date ad_date 指定日期*/
529 return mid("摩羯水瓶双鱼白羊金牛双子巨蟹狮子处女天秤天蝎射手摩羯",(month(ad_date)+sign(sign(day(ad_date) -(19+integer(mid('102123444423',month(ad_date),1))))+1))*4 -3,4)+'座'
530 end function
531
532 public function string of_getgenus (integer ai_year);/*函数功能:获取指定年份的生肖
533 返回值:string 返回指定的年份的生肖
534 参数:ai_year integer 年份*/
535 string ls_return
536 setnull(ls_return)
537 if ai_year <1900 then return ls_return
538 ls_return=mid(fill('鼠牛虎兔龙蛇马羊猴鸡狗猪',48),(mod(ai_year -1900,12)+13)*2 -1,2)
539 return ls_return
540 end function
541
542 public function string of_convertdayoflunar (date ad_date);string WeekName[0 to 7],TianGan[0 to 9],DiZhi[0 to 11],ShuXiang[0 to 11],DayName[0 to 30],MonName[0 to 12]
543 long MonthAdd[0 to 11],NongliData[0 to 99]
544 long curTime, curYear, curMonth, curDay, curWeekday
545 string GongliStr, WeekdayStr, NongliStr, NongliDayStr
546 long i, m, n, k, isEnd, bit,thedate
547 WeekName[0] = " * "
548 WeekName[1] = "星期日"
549 WeekName[2] = "星期一"
550 WeekName[3] = "星期二"
551 WeekName[4] = "星期三"
552 WeekName[5] = "星期四"
553 WeekName[6] = "星期五"
554 WeekName[7] = "星期六"
555
556 //天干名称
557 TianGan[0] = "甲"
558 TianGan[1] = "乙"
559 TianGan[2] = "丙"
560 TianGan[3] = "丁"
561 TianGan[4] = "戊"
562 TianGan[5] = "己"
563 TianGan[6] = "庚"
564 TianGan[7] = "辛"
565 TianGan[8] = "壬"
566 TianGan[9] = "癸"
567
568 //地支名称
569 DiZhi[0] = "子"
570 DiZhi[1] = "丑"
571 DiZhi[2] = "寅"
572 DiZhi[3] = "卯"
573 DiZhi[4] = "辰"
574 DiZhi[5] = "巳"
575 DiZhi[6] = "午"
576 DiZhi[7] = "未"
577 DiZhi[8] = "申"
578 DiZhi[9] = "酉"
579 DiZhi[10] = "戌"
580 DiZhi[11] = "亥"
581
582 //属相名称
583 ShuXiang[0] = "鼠"
584 ShuXiang[1] = "牛"
585 ShuXiang[2] = "虎"
586 ShuXiang[3] = "兔"
587 ShuXiang[4] = "龙"
588 ShuXiang[5] = "蛇"
589 ShuXiang[6] = "马"
590 ShuXiang[7] = "羊"
591 ShuXiang[8] = "猴"
592 ShuXiang[9] = "鸡"
593 ShuXiang[10] = "狗"
594 ShuXiang[11] = "猪"
595
596 //农历日期名
597 DayName[0] = "*"
598 DayName[1] = "初一"
599 DayName[2] = "初二"
600 DayName[3] = "初三"
601 DayName[4] = "初四"
602 DayName[5] = "初五"
603 DayName[6] = "初六"
604 DayName[7] = "初七"
605 DayName[8] = "初八"
606 DayName[9] = "初九"
607 DayName[10] = "初十"
608 DayName[11] = "十一"
609 DayName[12] = "十二"
610 DayName[13] = "十三"
611 DayName[14] = "十四"
612 DayName[15] = "十五"
613 DayName[16] = "十六"
614 DayName[17] = "十七"
615 DayName[18] = "十八"
616 DayName[19] = "十九"
617 DayName[20] = "二十"
618 DayName[21] = "廿一"
619 DayName[22] = "廿二"
620 DayName[23] = "廿三"
621 DayName[24] = "廿四"
622 DayName[25] = "廿五"
623 DayName[26] = "廿六"
624 DayName[27] = "廿七"
625 DayName[28] = "廿八"
626 DayName[29] = "廿九"
627 DayName[30] = "三十"
628
629 //农历月份名
630 MonName[0] = "*"
631 MonName[1] = "正"
632 MonName[2] = "二"
633 MonName[3] = "三"
634 MonName[4] = "四"
635 MonName[5] = "五"
636 MonName[6] = "六"
637 MonName[7] = "七"
638 MonName[8] = "八"
639 MonName[9] = "九"
640 MonName[10] = "十"
641 MonName[11] = "十一"
642 MonName[12] = "腊"
643
644 //公历每月前面的天数
645 MonthAdd[0] = 0
646 MonthAdd[1] = 31
647 MonthAdd[2] = 59
648 MonthAdd[3] = 90
649 MonthAdd[4] = 120
650 MonthAdd[5] = 151
651 MonthAdd[6] = 181
652 MonthAdd[7] = 212
653 MonthAdd[8] = 243
654 MonthAdd[9] = 273
655 MonthAdd[10] = 304
656 MonthAdd[11] = 334
657
658 //农历数据
659 NongliData[0] = 2635
660 NongliData[1] = 333387
661 NongliData[2] = 1701
662 NongliData[3] = 1748
663 NongliData[4] = 267701
664 NongliData[5] = 694
665 NongliData[6] = 2391
666 NongliData[7] = 133423
667 NongliData[8] = 1175
668 NongliData[9] = 396438
669 NongliData[10] = 3402
670 NongliData[11] = 3749
671 NongliData[12] = 331177
672 NongliData[13] = 1453
673 NongliData[14] = 694
674 NongliData[15] = 201326
675 NongliData[16] = 2350
676 NongliData[17] = 465197
677 NongliData[18] = 3221
678 NongliData[19] = 3402
679 NongliData[20] = 400202
680 NongliData[21] = 2901
681 NongliData[22] = 1386
682 NongliData[23] = 267611
683 NongliData[24] = 605
684 NongliData[25] = 2349
685 NongliData[26] = 137515
686 NongliData[27] = 2709
687 NongliData[28] = 464533
688 NongliData[29] = 1738
689 NongliData[30] = 2901
690 NongliData[31] = 330421
691 NongliData[32] = 1242
692 NongliData[33] = 2651
693 NongliData[34] = 199255
694 NongliData[35] = 1323
695 NongliData[36] = 529706
696 NongliData[37] = 3733
697 NongliData[38] = 1706
698 NongliData[39] = 398762
699 NongliData[40] = 2741
700 NongliData[41] = 1206
701 NongliData[42] = 267438
702 NongliData[43] = 2647
703 NongliData[44] = 1318
704 NongliData[45] = 204070
705 NongliData[46] = 3477
706 NongliData[47] = 461653
707 NongliData[48] = 1386
708 NongliData[49] = 2413
709 NongliData[50] = 330077
710 NongliData[51] = 1197
711 NongliData[52] = 2637
712 NongliData[53] = 268877
713 NongliData[54] = 3365
714 NongliData[55] = 531109
715 NongliData[56] = 2900
716 NongliData[57] = 2922
717 NongliData[58] = 398042
718 NongliData[59] = 2395
719 NongliData[60] = 1179
720 NongliData[61] = 267415
721 NongliData[62] = 2635
722 NongliData[63] = 661067
723 NongliData[64] = 1701
724 NongliData[65] = 1748
725 NongliData[66] = 398772
726 NongliData[67] = 2742
727 NongliData[68] = 2391
728 NongliData[69] = 330031
729 NongliData[70] = 1175
730 NongliData[71] = 1611
731 NongliData[72] = 200010
732 NongliData[73] = 3749
733 NongliData[74] = 527717
734 NongliData[75] = 1452
735 NongliData[76] = 2742
736 NongliData[77] = 332397
737 NongliData[78] = 2350
738 NongliData[79] = 3222
739 NongliData[80] = 268949
740 NongliData[81] = 3402
741 NongliData[82] = 3493
742 NongliData[83] = 133973
743 NongliData[84] = 1386
744 NongliData[85] = 464219
745 NongliData[86] = 605
746 NongliData[87] = 2349
747 NongliData[88] = 334123
748 NongliData[89] = 2709
749 NongliData[90] = 2890
750 NongliData[91] = 267946
751 NongliData[92] = 2773
752 NongliData[93] = 592565
753 NongliData[94] = 1210
754 NongliData[95] = 2651
755 NongliData[96] = 395863
756 NongliData[97] = 1323
757 NongliData[98] = 2707
758 NongliData[99] = 265877
759
760 curYear = Year(ad_date)
761 curMonth = Month(ad_date)
762 curDay = Day(ad_date)
763 GongliStr = string(curYear)+ "年"
764 If (curMonth < 10) Then
765 GongliStr = GongliStr + "0" +string(curMonth) + "月"
766 Else
767 GongliStr = GongliStr +string(curMonth)+"月"
768 End If
769 If (curDay < 10) Then
770 GongliStr = GongliStr+ "0" +string(curDay)+"日"
771 Else
772 GongliStr = GongliStr+string(curDay)+"日"
773 End If
774 //生成当前公历星期 ==> WeekdayStr
775 curWeekday = daynumber(ad_date)
776 WeekdayStr = weekName[curWeekday]
777 //计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)
778 TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd[curMonth - 1] - 38
779 If (mod(CurYear,4) = 0 And curMonth > 2) Then
780 TheDate = TheDate+1
781 End If
782 //计算农历天干、地支、月、日
783 isEnd = 0
784 m = 0
785 Do
786 If (NongliData[m] < 4095) Then
787 k = 11
788 Else
789 k = 12
790 End If
791 n = k
792 Do
793 If (n < 0) Then
794 Exit
795 End If
796 //获取NongliData(m)的第n个二进制位的值
797 bit = NongliData[m]
798 For i = 1 To n Step 1
799 bit = Int(bit / 2)
800 Next
801 bit = mod(bit,2)
802 If (TheDate <= 29 + bit) Then
803 isEnd = 1
804 Exit
805 End If
806 TheDate = TheDate - 29 - bit
807 n = n - 1
808 loop until 1<>1
809 If (isEnd = 1) Then
810 Exit
811 End If
812 m = m + 1
813 Loop until 1<>1
814 curYear = 1921 + m
815 curMonth = k - n + 1
816 curDay = TheDate
817
818 If (k = 12) Then
819 If (curMonth = (Int(NongliData[m] / 65536) + 1)) Then
820 curMonth = 1 - curMonth
821 ElseIf (curMonth > (Int(NongliData[m] / 65536) + 1)) Then
822 curMonth = curMonth - 1
823 End If
824
825 End If
826
827 //生成农历天干、地支、属相 ==> NongliStr
828 NongliStr = "农历" + TianGan[mod(mod(curYear - 4,60),10)] + DiZhi[mod(mod(curYear - 4, 60),12)] + "年"
829 NongliStr = NongliStr +"(" + ShuXiang[mod(mod(curYear - 4,60),12)] + ")"
830
831 //生成农历月、日 ==> NongliDayStr
832 If (curMonth < 1) Then
833 NongliDayStr = "闰" + MonName[-1 * curMonth]
834 Else
835 NongliDayStr = MonName[curMonth]
836 End If
837 NongliDayStr = NongliDayStr + "月"
838 NongliDayStr = NongliDayStr+DayName[curDay]
839 return nonglistr+nonglidaystr
840
841
842
843
844
845
846 end function
847 public function datetime of_relativedatetime (datetime ad_datetime, long al_number, string as_kind);//*******************************************************************************\\
848 //函数名:f_RelativeDataTime(datatime ad_datetime, long al_number, string al_kind)
849 //用 途:计算datatime类型的相对日期时间
850 //输 入:日期时间、相对数量、单位(天、小时、分、秒)
851 //输 出:推算后的日期时间
852 //*******************************************************************************\\
853 long ll_relativesecond,ll_second
854 time lt_time
855 date ld_date
856 constant long ONEDAYSECOND = 86400
857 ld_date = date(ad_datetime)
858 lt_time = time(ad_datetime)
859 choose case as_kind
860 case "天"
861 return datetime(relativedate(ld_date,al_number),lt_time)
862 case "小时"
863 ll_relativesecond = al_number * 3600
864 case "分"
865 ll_relativesecond = al_number * 60
866 case "秒"
867 ll_relativesecond = al_number
868 end choose
869 ll_second = hour(lt_time) * 3600 + minute(lt_time) * 60 + second(lt_time)
870 ld_date = relativedate(ld_date,integer(ll_relativesecond/ONEDAYSECOND))
871 ll_relativesecond -= integer(ll_relativesecond/ONEDAYSECOND) * ONEDAYSECOND
872 if (ll_second + ll_relativesecond < 0) then
873 return datetime(relativedate(ld_date,-1),relativetime(time("00:00:00:000"),ONEDAYSECOND + ll_second + ll_relativesecond))
874 end if
875 if (ll_second + ll_relativesecond > ONEDAYSECOND) then
876 return datetime(relativedate(ld_date,1),relativetime(time("00:00:00:000"),ll_second + ll_relativesecond - ONEDAYSECOND))
877 end if
878 return datetime(ld_date,relativetime(lt_time,ll_relativesecond))
879 end function
880
881 public function string of_gettgdz (integer ai_year);/*函数功能:获取指定年份的天干地支
882 返回值:string 返回指定的年份的天干地支
883 参数:ai_year integer 年份*/
884 string ls_return
885 setnull(ls_return)
886 if ai_year <1924 then return ls_return
887 ls_return=mid(fill('甲乙丙丁戊己庚辛壬癸',40),(mod(ai_year -1924,10)+11)*2 -1,2)+mid(fill('子丑寅卯辰巳午未申酉戌亥',48),(mod(ai_year -1924,12)+13)*2 -1,2)
888 return ls_return
889
890 end function
891
892 public function string of_gettgdz (date ad_date);/*函数功能:获取指定日期所在年份的天干地支
893 返回值:string 返回指定日期所在年份的天干地支
894 参数:ad_date date 年份*/
895 integer al_year
896 string ls_return
897 setnull(ls_return)
898 al_year=year(ad_date)
899 if al_year <1924 then return ls_return
900 ls_return=mid(fill('甲乙丙丁戊己庚辛壬癸',40),(mod(al_year -1924,10)+11)*2 -1,2)+mid(fill('子丑寅卯辰巳午未申酉戌亥',48),(mod(al_year -1924,12)+13)*2 -1,2)
901 return ls_return
902
903 end function
904
905 public function string of_gettgdz ();/*函数功能:获取当前日期所在年份的天干地支
906 返回值:string 返回当前日期所在年份的天干地支*/
907 integer al_year
908 string ls_return
909 setnull(ls_return)
910 al_year=year(today())
911 if al_year <1924 then return ls_return
912 ls_return=mid(fill('甲乙丙丁戊己庚辛壬癸',40),(mod(al_year -1924,10)+11)*2 -1,2)+mid(fill('子丑寅卯辰巳午未申酉戌亥',48),(mod(al_year -1924,12)+13)*2 -1,2)
913 return ls_return
914
915 end function
916
917 public function boolean of_isleapyear ();/*函数功能:获取当前日期所在年份是否为闰年
918 返回值:boolean 当前日期所在年份是否为闰年,true为是闰年,false为平年*/
919 integer li_year
920 li_year=year(today())
921 return abs(sign(mod(sign(mod(abs(li_year),4))+sign(mod(abs(li_year),100))+sign(mod(abs(li_year),400)),2)) -1)=1
922
923 end function
924
925 public function string of_getgenus (date ad_date);/*函数功能:获取指定日期所在年份的生肖
926 返回值:string 返回指定日期所在年份的生肖
927 参数:ad_date date 日期*/
928 integer li_year
929 string ls_return
930 li_year=year(ad_date)
931 setnull(ls_return)
932 if li_year <1900 then return ls_return
933 ls_return=mid(fill('鼠牛虎兔龙蛇马羊猴鸡狗猪',48),(mod(li_year -1900,12)+13)*2 -1,2)
934 return ls_return
935 end function
936
937 public function string of_getgenus ();/*函数功能:获取当前日期所在年份的生肖
938 返回值:string 返回当前日期所在年份的生肖 */
939 integer li_year
940 string ls_return
941 li_year=year(today())
942 setnull(ls_return)
943 if li_year <1900 then return ls_return
944 ls_return=mid(fill('鼠牛虎兔龙蛇马羊猴鸡狗猪',48),(mod(li_year -1900,12)+13)*2 -1,2)
945 return ls_return
946 end function
947
948 public function integer of_countdowinmonth ();/*函数功能:获取当前日期所在月份的星期一的天数
949 返回值:integer 当前日期所在月份的星期一的天数 */
950 return of_countdowinmonth(today(),2)
951
952
953
954 end function
955
956 public function integer of_getage (date ad_brithday);/*函数作用:获取指定生日到当前日期的年纪
957 函数返回值:integer 指定生日到当前日期的年纪
958 参数:date ad_brithday 出生日期*/
959 integer li_age
960 date ld_date
961 date ld_temp
962 ld_date=today()
963 if ad_brithday>ld_date then
964 ld_temp=ad_brithday
965 ad_brithday=ld_date
966 ld_date=ld_temp
967 end if
968 li_age=of_yearsafter(ad_brithday,ld_date)
969 if ld_date<date(year(ld_date),month(ad_brithday),day(ad_brithday)) (integer="" *函数功能:获取当前日期所在月份的指定星期几的天数="" -="" 1="" 1代表星期天......7代表星期六*="" ai_dow="" ai_dow);="" d_first="" date="" end="" function="" if="" if(ai_dow<1="" intcount,intmonth="" integer="" li_age="" of_countdowinmonth="" or="" public="" return="" then="" 参数:="" 指定当前所在月份的指定星期几的天数="" 指定的星期几="" 返回值:integer="">7) then
970 ai_dow=daynumber(today())
971 end if
972 intmonth=month(today())
973 d_first=date(year(today()),month(today()),1)
974 do while daynumber(d_first)<>ai_dow
975 d_first=relativedate(d_first,1)
976 loop
977 intcount=0
978 do while month(d_first)=intmonth
979 intcount=intcount+1
980 d_first=relativedate(d_first,7)
981 loop
982 return intcount
983
984
985 end function
986
987 public function long of_countweeksinyear ();/*函数用途:获取当前日期所在年份的星期数
988 返回值:long 返回当前日期所在年份的星期数*/
989 date ld_first_ofyear
990 integer li_weeknumber
991 integer li_leftover_days
992 ld_first_ofyear = Date(Year(today()), 1, 1)
993 li_weeknumber = of_WeeksAfter (ld_first_ofyear, today()) + 1
994 li_leftover_days = Mod(DaysAfter (ld_first_ofyear, today()), 7)
995 If (of_getdayinweek(ld_first_ofyear) + li_leftover_days) >= 8 then
996 li_weeknumber ++
997 End If
998 Return li_weeknumber
999 end function
1000
1001 public function boolean of_setsystemtime (datetime adt_datetime);stc_systemtime lstc_systemtime
1002 date ld_date
1003 time lt_time
1004 ld_date=date(adt_datetime)
1005 lt_time=time(adt_datetime)
1006 lstc_systemtime.wyear=year(ld_date)
1007 lstc_systemtime.wmonth=month(ld_date)
1008 lstc_systemtime.wday=day(ld_date)
1009 lstc_systemtime.wdayofweek=daynumber(ld_date)
1010 lstc_systemtime.whour=hour(lt_time)
1011 lstc_systemtime.wminute=minute(lt_time)
1012 lstc_systemtime.wsecond=minute(lt_time)
1013 lstc_systemtime.wmilliseconds=0
1014 return setsystemtime(lstc_systemtime)<>0
1015
1016 end function
1017
1018 on nvo_datetime.create
1019 call super::create
1020 TriggerEvent( this, "constructor" )
1021 end on
1022
1023 on nvo_datetime.destroy
1024 TriggerEvent( this, "destructor" )
1025 call super::destroy
1026 end on
1027
1028 event constructor;//**********************************************************//
1029 //nvo_datetime 日期时间操作类 ,自创建不可视用户对象 //
1030 //author:tiantianpb //
1031 //write date:2003-11-16 //
1032 //used:对各种常用的日期时间操作进行了相关的封装 //
1033 //********************************************************* //
1034
1035 end event</date(year(ld_date),month(ad_brithday),day(ad_brithday))></date(year(ad_date),month(ad_brithday),day(ad_brithday))></ad_startdate></ad_startdate></ad_startdate>