1

テーブル フィールドに開始日と終了日があります。

From Date から To date のマイナスを使用して、int 値 (Tot days) を取得しています。

Totdays = Todate - FromDate;

ここまでは問題ありませんが、date から Todate までの範囲に平日があると問題が発生します。

範囲内の平日を差し引いて、平日に基づいて TotDays を取得する X++​​ コードを記述する方法。

4

1 に答える 1

1

土曜日と日曜日を含まない 2 つの日付の間の日:

static void WorkDayDiff(Args _args)
{
    int i;
    Days workDayDiff(date d1, date d2)
    {
        Days y1 = dayofwk(d1);          // Day of week 1
        Days y2 = dayofwk(d2);          // Day of week 2
        date t1 = d1 - y1;              // Sunday before d1
        date t2 = d2 - y2;              // Sunday before d2
        Days y3 = (t2 - t1) div 7 * 5;  // Work days between Sundays
        Days y4 = min(y1-1,5);          // Work days before d1
        Days y5 = min(y2,5);            // Work days after t2
        return y3 - y4 + y5 - 1;        // Work days between d1 and d2
    }
    ;
    setprefix(strFmt("Today %1 %2", today(), dayname(dayofwk(today()))));
    for (i = -10; i <= 10; i++)
        info(strFmt("Diff %1 %2 = %3", today()+i, dayname(dayofwk(today()+i)), int2str(workDayDiff(today(), today() + i))));
}

d2 が d1 より小さい場合、カウントは負になりますが、期待どおりではない可能性があります。

于 2012-06-14T12:14:25.007 に答える