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}-1 在 LastFullWeek

于 2014-04-07T20:05:37.683 回答
0

您别无选择,只能使用自定义公式,因为 Crystal Reports 使用固定周设置(美国)。所以一周是星期日到星期六,DayOfWeek 从星期日开始(值/索引 1)。

于 2012-07-25T07:26:32.530 回答
0

对于通过搜索引擎找到此问题的其他人,如果没有更好的答案,该代码:

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

将 +1 添加到 LastFullWeek 最小值和最大值:

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 回答