【问题标题】:How to get the Weekly or 7 days of the Date Range in Crystal Report如何在 Crystal Report 中获取日期范围的每周或 7 天
【发布时间】:2014-06-06 09:14:47
【问题描述】:

如何在 Crystal Report 的公式字段中获取 7 天或每周取决于日期范围?

Example: 
   Date Range from March 01, 2014 to March 31, 2014 

Output:
    Week 1 (March 01 to March 07) 
    Week 2 (March 08 to March 14) 
    Week 3 (March 15 to March 21) 
    Week 4 (March 22 to March 28)          
    Week 5 (March 29 to March 31)

【问题讨论】:

  • 但是如果你看到三月的日历第一周只有first of march 假设一周的第一天是sunday 就像第二周是02 - March to 08 - March...你确定这个你的要求?
  • 不,它不是特定的月份,例如,我将尝试选择从 3 月 1 日到 4 月 15 日,因此它会自动获取 7 天,直到它到达时间范围的最后一天作为我的示例。
  • ok 在这种情况下第 5 周应该来自March 29 to Apr 4?
  • 是的,那么最后一周应该是 4 月 12 日到 4 月 15 日。

标签: crystal-reports crystal-reports-2008


【解决方案1】:

自定义函数RangeWeekSplitter 一年内有效。水晶语法。

Function  (dateTimeVar dFrom, dateTimeVar dTo)

// First day of the year
local dateTimeVar dBegCurrYear:= Date (Year(dFrom), 1, 1);

// Day of year (1 to 365 or 366 in a leap year)
local numberVar nFrom:= DatePart ("y", dFrom);
local numberVar nTo:= DatePart ("y", dTo);

local numberVar i;
local numberVar iTo;
local numberVar nDaysInWeek:= 7; // number of days in the week
local numberVar nWeek:= 0; // counter weeks
local stringVar sResult:= ""; // output string

for i:= nFrom to nTo step nDaysInWeek do
(
    nWeek:= nWeek+1;
    iTo:= i+(nDaysInWeek-1);

    if(i+nDaysInWeek > nTo)
        then iTo:= nTo;

    // generate output string
    sResult:= sResult + chr(13)+
        "Week " + CStr(nWeek) + " (" +
            CStr(DateAdd ("y", i-1, dBegCurrYear), "MMMM d") +
                " to " +
            CStr(DateAdd ("y", iTo-1, dBegCurrYear), "MMMM d") +
        ")";
);

sResult;

使用示例:

// Date range
local dateTimeVar dFrom:= Date (2016, 1, 14);
local dateTimeVar dTo:= Date (2016, 3, 4);

RangeWeekSplitter (dFrom, dTo);

【讨论】:

    【解决方案2】:

    您也可以将DatePart"ww" 一起使用。见IBM Knowledge Center

    DatePart (intervalType, inputDateTime)

    ...

    ww:一年中的第几周(1 到 53,firstDayOfWeek 和 firstWeekOfYear 确定一年中第一个日历周的确切天数)

    结合DatePart ("w", inputDateTime)DayOfWeek(inputDateTime) 获取星期几,您可以计算当前日历周的第一天和最后一天。

    因此对于一个特定日期 (inputDateTime),这将是您的公式“RangeWeek”:

    Function (DateTimeVar inputDateTime)
    NumberVar cw := DatePart("ww", inputDateTime);
    DateTimeVar first := DateAdd("d", 1 - DayOfWeek(inputDateTime, crMonday), inputDateTime);
    DateTimeVar last := DateAdd("d", 7 - DayOfWeek(inputDateTime, crMonday), inputDateTime);
    
    "Week " + ToText(cw) + " (" + ToText(first) + " to " + ToText(last) + ")"
    

    当然,您需要为 ToText 提供所需的格式字符串。

    例子:

    Input:  "August 23, 2017"
    Output: "Week 34 (August 21 to August 27)"
    

    这使您在获取日期范围的公式中变得更容易。

    DateTimeVar from := ...;
    DateTimeVar to := ...;
    NumberVar cw;
    NumberVar count := 0;
    StringVar output := "";
    for cw := DatePart("ww", from) to DatePart("ww", to) do
    (
        output := output + chr(13) + RangeWeek(DateAdd("d", 7*count, from));
        count := count + 1;
    );
    
    output
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 2021-10-20
      • 2023-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多