1

LastFullWeekを使用すると、最後の日曜日から土曜日の週になりますが、レポートでは、最後の月曜日から日曜日の週が必要です。この動作を取得する簡単な方法はありますか、それとも独自の関数を作成する必要がありますか(これはそれほど難しいことではありませんが、このような一般的な期間には不便です)。

4

5 に答える 5

4

カスタム関数:

//LastFullWeekEx
Function (DateVar date, Optional NumberVar firstDayOfWeek := crSunday)
  (date - DayOfWeek(date, firstDayOfWeek)) - 6 TO (date - DayOfWeek(date, firstDayOfWeek))

利用方法:

// use with non-volatile DataDate and Sunday
{TABLE.DATE} IN LastFullWeekEx(DataDate)

// use with non-volatile DataDate and Monday
{TABLE.DATE} IN LastFullWeekEx(DataDate, crMonday)

テスト:

// should return True
( Minimum(LastFullWeek) = Minimum(LastFullWeekEx(DataDate, crSunday)) ) AND
( Maximum(LastFullWeek) = Maximum(LastFullWeekEx(DataDate, crSunday)) )
于 2012-07-24T13:17:17.173 に答える
1

使用する代わりに

LastFullWeekの{DATE}

フォームを使用する

{DATE}-LastFullWeekの1

于 2014-04-07T20:05:37.683 に答える
0

検索エンジンでこの質問を見つけた他の人のためのコードは、より良い答えが得られない場合は、次のようになります。

{DATE} >= currentdate - dayofweek(currentdate, crMonday) - 6 AND
{DATE} <  currentdate - dayofweek(currentdate, crMonday) + 1
于 2012-07-24T09:09:10.797 に答える
0

Crystal Reportsは固定週設定(米国)を使用するため、カスタム数式を使用する以外に選択肢はありません。したがって、1週間は日曜日から土曜日であり、DayOfWeekは日曜日から始まります(値/インデックス1)。

于 2012-07-25T07:26:32.530 に答える
0

LastFullWeekの最小値と最大値に+1を追加します。

DateVar Start := Minimum(LastFullWeek)+1; //Monday
DateVar End := Maximum(LastFullWeek)+1;   //Sunday

編集:常に日曜日を週の最初の日と見なすためLastFullWeek、現在の日が日曜日であるかどうかを確認する必要があります。もしそうなら、私たちは一週間を引く必要があります:

// Check if the current day is Sunday
IF (DAYOFWEEK(CurrentDate) = 1)
THEN (
    Start := Start - 7;
    End := End - 7
);

例:日付範囲から文字列

StringVar LastWeekRange := ToText(Start) + " - " + ToText(End);

LastWeekRange;

戻り例:「MM / DD / YYYY-MM / DD/YYYY」


例:日付範囲内のすべての日付を選択する

{datefield} >= Start and {datefield} <= End;
于 2018-11-21T17:17:45.893 に答える