2014-04-22 5 views
8

Wie kann ich die 7 Tage oder die Woche abhängig vom Datumsbereich in Formelfeldern von Crystal Report abrufen?Wie erhalten Sie den Wochen- oder 7-Tage-Datumsbereich im Crystal Report

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) 
+0

aber wenn Sie die Kalenderwoche 1 März sehen, ist nur 'erste march' assmuming erster Tag der Woche ist' sunday' in der gleichen Art und Weise 2. Woche ist '02 - März 08 - March' .. Sind Sie das sicher mit Ihrer Anforderung? – Siva

+0

Nein, es ist kein bestimmter Monat und ich werde zum Beispiel versuchen, vom 1. März bis zum 15. April zu wählen, so dass es automatisch die 7 Tage erhält, bis es den letzten Tag des Zeitbereichs als mein Beispiel erreicht. – Captain16

+0

ok in diesem Fall Woche 5 sollte von '29. März bis 4. April sein? – Siva

Antwort

0

Benutzerdefinierte Funktion RangeWeekSplitter funktioniert innerhalb eines Jahres. Kristallsyntax.

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; 

Anwendungsbeispiel:

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

RangeWeekSplitter (dFrom, dTo); 
0

Sie DatePart mit "ww" verwenden können, auch. Siehe IBM Knowledge Center:

Datepart (intervalType, inputDateTime)

...

ww: Woche des Jahres (1 bis 53 mit firstDayOfWeek und FirstWeekOfYear die genauen Tage der ersten Kalenderwoche des Bestimmungs Jahr)

In Kombination mit DatePart ("w", inputDateTime) oder DayOfWeek(inputDateTime) den Tag der Woche erhalten, können Sie Ihren ersten und letzten Tag der aktuellen Kalenderwoche berechnen.

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) + ")" 

Sie ToText den Format-Strings geben müssen Sie natürlich wollen:

Also für ein bestimmtes Datum (inputDateTime), würde dies die Formel "RangeWeek" sein.

Beispiel:

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

, dass die Dinge einfacher in der Formel macht, wo Sie den Datumsbereich erhalten.

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