2014-04-22 11 views
8

Crystal Report'un formül alanlarında 7 gün veya haftalık olarak tarih aralığına bağlı olarak nasıl alabilirim?Tarih Raporunun Haftalık veya 7 günlüğüne Crystal Report'ta nasıl edinilir

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

ama sadece 'march' ilk haftanın ilk günü aynı şekilde sunday' 2 hafta' 02 'dır assmuming olan March' .. bunun gereği olduğundan emin misin? – Siva

+0

Hayır, bu belirli bir ay değil ve örneğin 1 Mart'tan 15 Nisan'a kadar seçim yapmaya çalışacağım. Bu nedenle, örneklem olarak zaman aralığının son gününe ulaşana kadar otomatik olarak 7 gün alacaktır. – Captain16

+0

bu durumda tamam 5. Hafta 29 Mart ile 4 Nisan arasında olmalıdır? – Siva

cevap

0

Özel işlevi bir yıl içinde RangeWeekSplitter çalışır. Kristal Sözdizimi.

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; 

Kullanım örneği:

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

RangeWeekSplitter (dFrom, dTo); 
0

Sen de "ww" ile DatePart kullanabilirsiniz. IBM Knowledge Center Bkz:

DatePart (intervalType, inputDateTime)

...

ww: FirstDayOfWeek ve firstWeekOfYear ilk takvim haftası kesin günlerini belirlenmesiyle 53 yıl (1 Hafta

DatePart ("w", inputDateTime) veya DayOfWeek(inputDateTime) haftanın gününü alma ile birlikte yıl), geçerli takvim haftanın ilk ve son gününü hesaplayabilirsiniz.

Yani belirli bir tarihe ( inputDateTime) için, bu formül "RangeWeek" olacaktır:

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

Elbette istediğiniz biçim dizeleri, ToText vermek gerekir.

Örnek:

tarih aralığını olsun formülde şeyleri kolaylaştırır
Input: "August 23, 2017" 
Output: "Week 34 (August 21 to August 27)" 

. 08 Mart - - Eğer yürüyüşü hafta 1 takvim görürseniz

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 
İlgili konular