2 つの日付が与えられた場合、PHP で平日の数を見つける最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/80541

  •  09-06-2019
  •  | 
  •  

質問

タイトルを見れば一目瞭然です。2 つの日付が与えられた場合、PHP を使用して曜日の数を見つける最良の方法は何ですか?平日は月曜日から金曜日です。

たとえば、間に 10 平日があることをどうやって確認すればよいでしょうか。 31/08/2008 そして 13/09/2008?

役に立ちましたか?

解決

        $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/

他のヒント

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

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

このソリューションの詳しい説明は、次のとおりです。 ジョー・セルコのセットでの思考:SQL の補助テーブル、テンポラルテーブル、仮想テーブル

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

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

到着予定時刻:おお..月曜日から金曜日までの平日を意味していましたね。最初はそれが見えませんでした..

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

ここでは、PHP 関数 mktime() と date() (UNIX タイムスタンプを操作するため) が友達になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top