0

私は平日に何かの年齢を数えようとしています。この質問で詳述されている方法を試しました。日付範囲が指定されている場合、その範囲内で部分的または完全に週末の数を計算する方法は? しかし、それは私のユースケースに合わないようです。

アイテムがDATETIMEデータベースに作成されており、作成日が 2 日以上経過している場合は古いものとしてマークする必要があります。ただし、クライアントは、年齢が平日 (月から金) のみをカウントし、土日を除外するように要求しています。

これまでのところ、私の擬似コードは次のようになります。

now - created_datetime = number_of_days
for(i number_of_days)
  if(created_datetime - i)
    is a weekday, then age++

これを達成するためのよりクリーンな方法が必要ですか?あるアイテムが非常に古くなった場合のように、その年齢の毎日をループして、週末の日を探すと速度にかなりの影響を与えます。

どんなアイデアも素晴らしいでしょう!ありがとう

4

2 に答える 2

1

平日の正確な年齢を知るには、過去 7 日間を確認するだけで済みます。

直感は次のとおりです。

オブジェクトの総経過時間から、その有効期間内の週末の数を引きます。7 日ごとに正確に 2 つの週末があることに注意してください。これに、残りの日数 (丸 1 週間に含まれない日数) の週末の日数を追加すると、その有効期間内の週末の日数の合計が必要になります。平日の年齢を取得するには、実際の年齢から引きます。

int weekendCount = 0;
// Check the remainder days that are not in a full week.
for (int i = totalAge % 7; i < 7; i++) {
    if (created_datetime - i is weekend) {
        weekendCount++;
    }
}

weekdayAge = totalNumberOfDays  - (((totalNumberOfDays / 7) * 2) + weekendCount);

除算は整数除算であることに注意してください。

于 2010-04-12T15:37:20.607 に答える
0

数学と少しの慎重な思考でこれを行うことができると確信しています. アイテムが作成された曜日と現在の曜日を確認する必要があります。最初に、最初に行っていたと確信しているように、経過日数を計算します。

// if today is saturday, subtract 1 from the day. if its sunday, subtract 2
if (now() is sunday) $now = now() - 2 days;
if (now() is saturday) $now = now() - 1 day;

// same thing for $date posted.  but adding 1 or 2 days
if ( $date is saturday) $date = $date + 2;
if ( $date is sunday) $date = $date + 1;

// get days difference
$days = $today - $date;
// have to subtract 2 days for every 7
$days = $days - floor($days/7)*2

それが機能するかどうかを確認する必要があります。たぶん、週末の前後に日付を移動せずに計算を行うことができます。完璧ではないかもしれませんが、正しい考えです。繰り返す必要はありません。

于 2010-04-12T15:36:32.637 に答える