0

サイトを CF8 から openBD に変換しようとしています。日付範囲をループするサイトに cfloop があります。

本質的に、日付範囲 (開始日と終了日) の 2 週間 (ステップ) ごとに新しいレコードをデータベースに挿入したい

私のループは次のようになります...

<cfloop 
  from  = "#form.startDate#" 
  to    = "#form.endDate#" 
  index = "i" 
  step  = "#theStep#"
>

これは CF8 では完全に機能しますが、openBD ではこのエラーが発生します... データがサポートされていません: 値 [11/05/09] は数値ではありません

回避策のアイデアはありますか?

どうも

4

3 に答える 3

1

問題は、FORMからロケールに依存するあいまいな日付文字列をチェックしないことにあります。

より堅牢なバージョンは次のようになります。

<cfset SetLocale("English (US)")> <!--- set expected input locale here --->

<cfif LSIsDate(form.startDate) and LSIsDate(form.endDate)>
  <cfset theStep = 14>

  <cfloop 
    from  = "#LSParseDate(form.startDate)#" 
    to    = "#LSParseDate(form.endDate)#" 
    index = "i" 
    step  = "#theStep#"
  >
    <!--- do stuff --->
  </cfloop>
<cfelse>
  <!--- output some error message --->
</cfif>

「yyyy-mm-dd」のように、フォームに明確な日付形式を入力するように制限すると便利です。

「値は数値ではありません」というエラーは、日付を入力してもループが数値を超えてしまうという事実に起因します。その場合、これらの日付の数値表現を使用しますが、それが機能するには、有効でわかりやすいものでなければなりません。

于 2008-11-05T21:47:47.807 に答える
0

Ben が言うように、あなたのコードはありません。101 010 アイコンを使用してコード ブロックを作成する必要があります。

動作するはずの別のソリューションを次に示します。

<cfloop index="Current" from="#parseDateTime(StartDate)#" to="#parseDateTime(EndDate)#" step="14">
    [do stuff]
</cfloop>
于 2008-11-04T23:03:13.300 に答える
0

コードが表示されませんが、最初の提案は次のとおりです。

<cfset current = [your begin date]>
<cfloop condition = "datecompare(enddate, current)">
  [do stuff]
  <cfset current = dateadd('d', 14, current)>
</cfloop>

HTH。

于 2008-11-04T20:07:21.893 に答える