タイトルはほとんど自明です。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 句) を使用して単純なカウント クエリを実行することです。
このソリューションは、Joe Celko の Thinking in Sets: Auxiliary, Temporal, and Virtual Tables in SQL で完全に説明されています。
1 つの方法は、strtotime(...) を使用して日付を UNIX タイムスタンプに変換し、結果を減算して 86400 (24*60*60) で除算することです。
$dif_in_seconds = abs(strtotime($a) - strtotime($b));
$daysbetween = $dif_in_seconds / 86400;
ETA: ああ..月曜日から金曜日までの平日という意味でした..最初はそれがわかりませんでした..
最善の方法は、指定された日付範囲内のすべての日付を反復処理し、各日付の曜日を取得することです。平日の場合は、特定のカウンターをインクリメントします。プロセスの最後に、平日の数を取得します。
ここでは、PHP 関数 mktime() および date() (UNIX タイムスタンプを操作するため) が役に立ちます。