2 つの日付が与えられた場合、PHP で平日の数を見つける最良の方法は何ですか?
質問
タイトルを見れば一目瞭然です。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;
他のヒント
請求書発行システムを作成している場合は、銀行休業日やイースターなどを考慮する必要があります。それを計算するのは簡単ではありません。
私がこれまで見た中で最良の解決策は、日数とその型を含むテーブルを 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 タイムスタンプを操作するため) が友達になります。
所属していません StackOverflow