[ 파워빌더.공통함수 - 연월일 가감 ]

 

☞   

 

//함수 소스를 그대로 홀립니다.

//복사하시어 파일로 만들어 인포트 하세요

// 파일명은 gf_relativeymdt.srf 로 하세요

//===========이하 소스=================================

$PBExportHeader$gf_relativeymdt.srf
$PBExportComments$년월일시를 가감한다.
global type gf_relativeymdt from function_object
end type

forward prototypes
global function datetime gf_relativeymdt (string as_gubun, datetime adt_datetime, integer as_ad)
end prototypes

global function datetime gf_relativeymdt (string as_gubun, datetime adt_datetime, integer as_ad);// DateTime을 더하고 빼는 함수
// datetime gf_RelativeYMDT(string as_gubun, datetime adt_datetime, integer as_Ad)
// as_gubun -> ["Y", "M", "D", "T"] 년, 월 , 일, 시
// adt_datetime -> 변환될 일시
// as_Ad    -> 가감 숫자
DateTime ldt_datetime
String   ls_y, ls_m, ls_d, ls_time
Integer  li_y, li_m, li_d
Date     ld_date
time     lt_time
integer  li_mod
if as_Ad = 0 then return adt_datetime
ls_y  = String(adt_datetime, "YYYY")
ls_m  = String(adt_datetime, "MM")
ls_d  = String(adt_datetime, "DD")
ls_time = String(adt_datetime, "HH:MM:SS")
li_y     = Integer(ls_y)
li_m     = Integer(ls_m)
li_d     = Integer(ls_d)
lt_time  = time(ls_time)
ld_date  = Date(adt_datetime)
choose case as_gubun
 Case "Y" //년가감
  li_y = li_y + as_Ad
  ls_y = String(li_y, "0000")
  ld_date = Date(ls_y+"-"+ls_m+"-"+ls_d)
 Case "M" //월가감
  li_m = li_m + as_Ad
  if li_m = 0 then
   li_m = 12
   li_y = li_y - 1
  elseif li_m > 0 then
   if li_m > 12 then
    li_mod = 1
    li_m = li_m - 12
    Do While li_m > 12
     li_mod += 1
     li_m = li_m - 12
    Loop
    li_y = li_y + li_mod
   end if
  else
   if li_m < -12 then
    li_mod = 1
    li_m = li_m + 12
    Do While li_m < -12
     li_mod += 1
     li_m = li_m + 12
    loop
    li_y = li_y - li_mod
   else
    li_y = li_y - 1
    li_m = 12 + li_m
   end if
  end if
  ls_y = String(li_y, "0000")
  ls_m = String(li_m, "00")
  if ls_d = '31' then
   choose case ls_m
    case '01', '03', '05', '07', '08', '10', '12'
     ls_d = ls_d
    Case '02'
     if Mod(li_y, 4) = 0 or Mod(li_y, 400) = 0 then
      ls_d = '29'
     else
      ls_d = '28'
     end if
    Case '04', '06', '09', '11'
     ls_d = '30'
   end choose
  end if
  ld_date = Date(ls_y+"-"+ls_m+"-"+ls_d)
 Case "D" //일가감
  ld_date = RelativeDate ( ld_date, as_Ad )
 Case "T" //시가감
  lt_time = RelativeTime ( lt_time, as_Ad )
end choose

ldt_dateTime = DateTime(ld_date, lt_time)

return ldt_dateTime
end function

 

Posted by 농부지기
,