pb中日期加减函数,类似sql的Dateadd函数
来源:互联网 发布:中文输入法下载 linux 编辑:程序博客网 时间:2024/05/22 08:23
- Long ll_SecondTmp, ll_second, i
- Int li_DaysNum
- Time lt_time
- Date ld_date, ld_dateTmp
- String ls_Date
- Constant Long DAYSECOND = 86400
- ld_date = Date(adt_dt)
- lt_time = Time(adt_dt)
- CHOOSE CASE as_datepart
- CASE "year","yy","yyyy"
- ls_Date = String(year(ld_date) + al_number) + String(ld_date, '-mm-dd')
- IF NOT IsDate(ls_Date) THEN
- ls_Date = String(year(ld_date) + al_number) + String(RelativeDate( ld_date, -1 ), '-mm-dd')
- END IF
- ld_Date = Date(ls_Date)
- RETURN DateTime( ld_date, lt_time )
- CASE "month","mm","m"
- ld_dateTmp = Date(String(ld_date, 'yyyy-mm-') + '01')
- IF al_number < 0 THEN
- li_DaysNum = Integer(28+Integer(Mid('3'+String(Abs(Sign(Mod(Sign(Mod(Abs(Year(ld_dateTmp)),4))+Sign(Mod(Abs(Year(ld_dateTmp)),100))+Sign(Mod(Abs(Year(ld_dateTmp)),400)),2)) -1))+'3232332323',Month(ld_dateTmp),1)))
- ld_dateTmp = Date(String(ld_dateTmp, 'yyyy-mm-') + String(li_DaysNum))
- END IF
- FOR i = 1 To abs(al_number)
- li_DaysNum = Integer(28+Integer(Mid('3'+String(Abs(Sign(Mod(Sign(Mod(Abs(Year(ld_dateTmp)),4))+Sign(Mod(Abs(Year(ld_dateTmp)),100))+Sign(Mod(Abs(Year(ld_dateTmp)),400)),2)) -1))+'3232332323',Month(ld_dateTmp),1)))
- IF al_number >= 0 THEN
- ld_dateTmp = RelativeDate( ld_dateTmp, li_DaysNum )
- ELSE
- ld_dateTmp = RelativeDate( ld_dateTmp, 0 - li_DaysNum )
- END IF
- NEXT
- li_DaysNum = Integer(28+Integer(Mid('3'+String(Abs(Sign(Mod(Sign(Mod(Abs(Year(ld_dateTmp)),4))+Sign(Mod(Abs(Year(ld_dateTmp)),100))+Sign(Mod(Abs(Year(ld_dateTmp)),400)),2)) -1))+'3232332323',Month(ld_dateTmp),1)))
- ls_Date = String(ld_dateTmp, 'yyyy-mm-') + String(day(ld_date))
- IF NOT IsDate( ls_Date ) THEN
- ls_Date = String(ld_dateTmp, 'yyyy-mm-') + String(li_DaysNum)
- END IF
- ld_Date = Date(ls_Date)
- RETURN DateTime( ld_date, lt_time )
- CASE "week","wk","ww"
- RETURN DateTime( RelativeDate(ld_date,al_number * 7 ), lt_time )
- CASE "day","d","dd"
- RETURN DateTime( RelativeDate(ld_date,al_number), lt_time )
- CASE "hour","hh"
- ll_SecondTmp = al_number * 3600
- CASE "minute","mi","n"
- ll_SecondTmp = al_number * 60
- CASE "second","ss","s"
- ll_SecondTmp = al_number
- END CHOOSE
- ll_second = Hour(lt_time) * 3600 + Minute(lt_time) * 60 + Second(lt_time)
- ld_date = RelativeDate(ld_date,Integer(ll_SecondTmp/DAYSECOND))
- ll_SecondTmp -= Integer(ll_SecondTmp/DAYSECOND) * DAYSECOND
- If ( ll_second + ll_SecondTmp < 0 ) THEN
-
- RETURN DateTime(RelativeDate(ld_date,-1), Time( String(RelativeTime(Time("00:00:00"), DAYSECOND + ll_second + ll_SecondTmp), 'hh:mm:ss') + '.' + String(lt_time, 'fff')))
- END IF
- If ( ll_second + ll_SecondTmp >= DAYSECOND ) THEN
-
- RETURN DateTime(RelativeDate(ld_date,1), Time( String(RelativeTime(Time("00:00:00"), ll_second + ll_SecondTmp - DAYSECOND), 'hh:mm:ss') + '.' + String(lt_time, 'fff')))
- END IF
- RETURN DateTime( ld_date, Time( String(RelativeTime( lt_time, ll_SecondTmp ), 'hh:mm:ss') + '.' + String(lt_time, 'fff')) )