2

Crystal Reports XI で特定の日付の ISO-8601 週番号を取得するにはどうすればよいですか?

4

1 に答える 1

6

Crystal Reports はDatePart、特定の日付の ISO 週番号を取得できる - 関数をサポートしています。

NumberVar week := DatePart("ww", date, crMonday, crFirstFourDays);

ただし、Crystal Reports XI にはバグがあり、正月に誤った結果が返されます。おそらく最善の解決策は、独自の関数 getISOWeekNumber を作成することです。

Function (optional DateVar d := CurrentDate)
NumberVar week := DatePart("ww", d, crMonday, crFirstFourDays);

// Correct for that CR doesn't handle the fact that the last days of a year can belong to week 1 of the next year:
if week = 53 and DatePart("ww", cDate(year(d) + 1, 1, 1), crMonday, crFirstFourDays) = 1 then
    week := 1

// A bug in CR makes DatePart return values like 9363 for days in January that belongs to the last week of the previous year.
else if week > 53 then
    week := DatePart("ww", cDate(year(d) - 1, 12, 31), crMonday, crFirstFourDays);

week;

特定の日付の「週年」を取得するには、次の関数を使用できます。

// Returns the year to which the ISO week of the specified date belongs.
// E.g. 2012-12-31 will return 2013, as that date belongs to week 1 of 2013.
Function (optional DateVar d := CurrentDate)

NumberVar week := getISOWeekNumber (d);

if week = 1 and month(d) = 12 then
    year(d) + 1
else if week > 10 and month(d) = 1 then
    year(d) - 1
else
    year(d);
于 2012-12-04T10:41:39.910 に答える