1

タイトルはほとんど自明です。2 つの日付が与えられた場合、PHP を使用して週の日数を見つける最良の方法は何ですか? 平日は月曜日から金曜日です。

たとえば、 と の間に 10 週間の日数があることをどのように確認できます31/08/200813/09/2008?

4

4 に答える 4

3
        $datefrom = strtotime($datefrom, 0);
        $dateto = strtotime($dateto, 0);

        $difference = $dateto - $datefrom;

        $days_difference = floor($difference / 86400);
        $weeks_difference = floor($days_difference / 7); // Complete weeks

        $first_day = date("w", $datefrom);
        $days_remainder = floor($days_difference % 7);

        $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
        if ($odd_days > 7) { // Sunday
            $days_remainder--;
        }
        if ($odd_days > 6) { // Saturday
            $days_remainder--;
        }

        $datediff = ($weeks_difference * 5) + $days_remainder;

ここから: http://www.addedbytes.com/php/php-datediff-function/

于 2008-09-17T06:40:33.607 に答える
2

請求書発行システムを作成する場合、祝日やイースターなどを考慮する必要があります。計算は簡単ではありません。

私が今まで見た中で最善の解決策は、日とその型を含むテーブルを SQL データベースに事前生成し (1 日あたりの行 = 1 年あたり 365 行)、適切な選択 (WHERE 句) を使用して単純なカウント クエリを実行することです。

このソリューションは、Joe Celko の Thinking in Sets: Auxiliary, Temporal, and Virtual Tables in SQL で完全に説明されています。

于 2008-09-17T06:52:59.410 に答える
0

1 つの方法は、strtotime(...) を使用して日付を UNIX タイムスタンプに変換し、結果を減算して 86400 (24*60*60) で除算することです。

$dif_in_seconds = abs(strtotime($a) - strtotime($b));
$daysbetween = $dif_in_seconds / 86400;

ETA: ああ..月曜日から金曜日までの平日という意味でした..最初はそれがわかりませんでした..

于 2008-09-17T06:32:05.220 に答える
0

最善の方法は、指定された日付範囲内のすべての日付を反復処理し、各日付の曜日を取得することです。平日の場合は、特定のカウンターをインクリメントします。プロセスの最後に、平日の数を取得します。

ここでは、PHP 関数 mktime() および date() (UNIX タイムスタンプを操作するため) が役に立ちます。

于 2008-09-17T06:33:37.990 に答える