4

powerbuilderで日付に2年を追加し、うるう年を正しく説明するにはどうすればよいですか?

ユーザーが2年の有効期限を希望する医師免許申請書があります。現在のライセンス日は2010年7月10日で、有効期限は2012年7月2日です。相対的な日付を使用し、うるう年でない場合は729を追加し、うるう年の場合は730を追加しました。

私は、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

これがより再利用可能なソリューションです-そしてあなたが必要とする以上のことをすることができます-それはグローバルな機能です-またはあなたの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)を返します

終了してみてください

于 2010-06-27T19:58:23.187 に答える
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 に答える