powerbuilderで日付に2年を追加し、うるう年を正しく説明するにはどうすればよいですか?
ユーザーが2年の有効期限を希望する医師免許申請書があります。現在のライセンス日は2010年7月10日で、有効期限は2012年7月2日です。相対的な日付を使用し、うるう年でない場合は729を追加し、うるう年の場合は730を追加しました。
私は、relativedate関数が別のパラメーターを取り、数年で渡すことができるようにしたいと思います。
powerbuilderで日付に2年を追加し、うるう年を正しく説明するにはどうすればよいですか?
ユーザーが2年の有効期限を希望する医師免許申請書があります。現在のライセンス日は2010年7月10日で、有効期限は2012年7月2日です。相対的な日付を使用し、うるう年でない場合は729を追加し、うるう年の場合は730を追加しました。
私は、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)
これがより再利用可能なソリューションです-そしてあなたが必要とする以上のことをすることができます-それはグローバルな機能です-またはあなたのnvo愛好家のためにあなたはそれをそれらの1つに置くことができます:
>>
/*それがすること
追加したい日付と日、月、年を渡すと、新しい日付が返されます
利用方法
ai_days ai_months ai_yearsには、負の数と12を超える月を含む任意の数を送信できます(たとえば、ai_months = -18は過去18か月を意味します)
引数
dateadt_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 = 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を投げる
成功を返す
キャッチ(runtimeerror lrteo_error)
logerror(lrteo_error)を返します
終了してみてください
これは私が使用したコードです:
//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)