4
私は、以下の既知のパラメータに基づいて発生するイベントの合計数を計算しようとしているの日付範囲と設定日数に基づいて発生数を取得週
- 開始日
- 終了日 週の
- 日 次の例に基づいて、数週間(毎週、2週間毎、等)。例えば
の
- 2017年5月1日
- 2017年5月31日
- 1,4(日曜日、水曜日)
- ごとに2週間
私はそれを計算しなければなりませんこのイベントは4回実行されます(5/7、5/10、5/21、5/24)
以下は私が設定したスケルトンです。私は完全に週の数に基づいてループの現在の日を増やす方法に困っています。
<cfset local.totalRuns = 0 />
<cfset local.startDate = '2017-05-01' />
<cfset local.endDate = '2017-05-31' />
<cfset local.totalDays = DateDiff("d", local.startDate, local.endDate) />
<cfset local.daysPerWeek = '1,4' />
<cfset local.recurrence = 2 />
<cfset local.currentLoop = 0 />
<cfset local.weeksToCount = local.recurrence * 2 />
<!--- Loop a day at a time --->
<cfloop from="#local.startDate#" to="#local.endDate#" index="local.thisDay" step="#createTimespan(1, 0, 0, 0)#">
<cfset local.currentDate = local.thisDay />
<!--- Loop over each allowed day of the current week and determine actual date --->
<cfloop list="#local.daysPerWeek#" index="local.currentDay">
<!--- if current date does not exceed the end date add increment (this current is incorrect) --->
<cfif DateDiff("d", local.currentDate, local.endDate) LTE 0>
<cfset local.totalRuns++ />
</cfif>
</cfloop>
<cfset local.currentLoop++ />
</cfloop>
local.totalRunsとlocal.currentLoopの最後にどのような値がありますか? – tech2017
私は日付範囲のチェックのために日付ディメンションテーブルを使用することの巨大なファンです。私はまた、イベントが実際に発生したときに修正することが、ここのトリックだと思っています。私が何かを誤解していない限り、2週間ごとに日曜日に実行さえすれば、startDateを5/1と5/8に設定すると、このコードは異なる結果を返すと思います。 – Shawn
ショーン - あなたは2週間は少し不明であることは間違いありません。今週は1週間が始まり、2週間はFOLLOWINGの週が始まり、その後は2週間が始まります。これはちょっとしたものです。 –