如何将 2 年添加到 powerbuilder 中的日期并正确计算闰年?
我们有一个医疗许可证申请,用户希望日期到期两年。当前的许可日期是 2010 年 7 月 10 日,到期日期应该是 2012 年 7 月 2 日。
我希望 relativedate 函数采用另一个参数,以便您可以传递数字年。
如何将 2 年添加到 powerbuilder 中的日期并正确计算闰年?
我们有一个医疗许可证申请,用户希望日期到期两年。当前的许可日期是 2010 年 7 月 10 日,到期日期应该是 2012 年 7 月 2 日。
我希望 relativedate 函数采用另一个参数,以便您可以传递数字年。
怎么样:
// 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
祝你好运,
特里
如果你使用 PFC,你可以这样做:
n_cst_datetime luo_dateTime
ld_calculate_date_to = luo_dateTime.of_relativeYear(ldt_calculate_date, 2)
这是我使用的代码:
//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)
这是更可重用的解决方案 - 并且可以做的比你需要的更多 - 它是全局功能 - 或者对于你的 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)
结束尝试