如何在powerbuilder中添加2年的日期并正确计算闰年?
我们有一个医疗许可证申请,用户希望该日期过期两年。目前的许可日期是2010年7月10日,到期日期应该是7/2/2012我使用了相对日期,如果不是闰年则增加729,如果是,则增加730但是很麻烦。
我希望relativedate函数采用另一个参数,以便您可以传入数年。
答案 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)
结束尝试