如何在powerbuilder中添加2年并正确计算闰年?

时间:2010-01-05 20:57:47

标签: powerbuilder leap-year

如何在powerbuilder中添加2年的日期并正确计算闰年?

我们有一个医疗许可证申请,用户希望该日期过期两年。目前的许可日期是2010年7月10日,到期日期应该是7/2/2012我使用了相对日期,如果不是闰年则增加729,如果是,则增加730但是很麻烦。

我希望relativedate函数采用另一个参数,以便您可以传入数年。

4 个答案:

答案 0 :(得分:2)

怎么样:

// adjusted from suggestions
IF Month (ldt_OldDate) = 2 AND Day (ldt_OldDate) = 29 THEN
   ldt_NewDate = Date (Year(ldt_OldDate) + 2, 3, 1) 
   // or ... 2, 28) whichever you think is two years from Feb 29
ELSE
   ldt_NewDate = Date (Year(ldt_OldDate) + 2, Month (ldt_OldDate), Day (ldt_OldDate))
END IF
祝你好运,

特里

答案 1 :(得分:1)

如果你使用PFC,你可以这样做:

n_cst_datetime     luo_dateTime   

ld_calculate_date_to = luo_dateTime.of_relativeYear(ldt_calculate_date, 2)

答案 2 :(得分:0)

这是我使用的代码:

//Get the license Issue Date
  ldt_calculate_date = this.GetItemDateTime(1, 'issue_date')

//Add two years to the date
  ld_calculate_date = date(ldt_calculate_date)
    ld_NewDate = Date ((Year(ld_calculate_date) + 2), Month (ld_calculate_date), Day 
        (ld_calculate_date))

//Subtract 1 from the date for correct expiration
  ld_calculate_date_to = date(RelativeDate(ld_NewDate, -1))

//Set expiration date on my datawindow
  setitem(1,"expiration_date", ld_calculate_date_to)

答案 3 :(得分:0)

这里有更多可重复使用的解决方案 - 并且可以比您需要的更多 - 它是全球功能 - 或者对于您的nvo爱好者,您可以将其中的一个放在其中:

>

  

/ *   它做了什么

     

传递日期&您想要添加的日期,月份,年份     并返回新日期

     

USAGE

     

你可以发送ai_days ai_months ai_years中包含负数的任何数字     和月份大于12(例如ai_months = -18表示过去18个月)

     

ARGUMENTS

     

date adt_change - 传入&返回更改日期

     

intger ai_days

     

整数ai_months

     

整数ai_years

     

返回整数

     

* /

     

     

整数li_add_years

     

整数li_new_day

     

整数li_new_month

     

整数li_new_year

     

整数li_total_months

     
    

添加日期

  
     

如果ai_days<> 0然后         adt_change = relativedate(adt_change,ai_days)

     

如果是isnull(adt_change)则抛出STOP     结束如果

     
    

保存更改日期&月&年

  
     

li_new_day = day(adt_change)

  if isnull(li_new_day) then throw STOP
     

li_new_month = month(adt_change)

  if isnull(li_new_month) then throw STOP
     

li_new_year =年(adt_change)

  if isnull(li_new_year) then throw STOP
     
    

更改月份

  
     

如果ai_months<> 0然后

  li_total_months = li_new_month + ai_months

  li_new_month = mod(li_total_months,12)

      if isnull(li_new_month) then throw STOP

  li_add_years = int(li_total_months/12)  

      if isnull(li_add_years) then throw STOP

  if li_total_months <=0 then li_new_month += 12      
     

结束如果

     
    

改变年份

  
     

li_new_year + = li_add_years + ai_years

     
    

重置日期

  
     

adt_change = date(li_new_year,li_new_month,li_new_day)

  if adt_change = 1900-01-01 or isnull(adt_change) then 
     

抛出STOP

     

返回SUCCESS

     

catch(runtimeerror lrteo_error)

     

return logerror(lrteo_error)

     

结束尝试