4

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

我们有一个医疗许可证申请,用户希望日期到期两年。当前的许可日期是 2010 年 7 月 10 日,到期日期应该是 2012 年 7 月 2 日。

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

4

4 回答 4

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

祝你好运,

特里

于 2010-01-05T23:33:50.873 回答
1

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

n_cst_datetime     luo_dateTime   

ld_calculate_date_to = luo_dateTime.of_relativeYear(ldt_calculate_date, 2)
于 2010-01-09T04:15:18.027 回答
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)
于 2010-01-06T17:03:50.140 回答
0

这是更可重用的解决方案 - 并且可以做的比你需要的更多 - 它是全局功能 - 或者对于你的 nvo 爱好者,你可以把它放在其中之一:

>

/* 它能做什么

传递一个日期和你想添加到它的天、月、年,它会返回新的日期

用法

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

论据

date adt_change - 传入并返回更改的日期

整数 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)

if isnull(adt_change) 然后抛出 STOP end if

保存更改的日期和月份和年份

li_new_day = day(adt_change)

  if isnull(li_new_day) then throw STOP

li_new_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 = 日期(li_new_year,li_new_month,li_new_day)

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

抛出 STOP

返回成功

捕获(运行时错误 lrteo_error)

返回日志错误(lrteo_error)

结束尝试

于 2010-06-27T19:58:23.187 回答