最も簡単な手法は、終了日まで、開始日からループを作成することです(あなたがひそか必要があります両方ともタイムスタンプにmktime経由で追加して、増分に1日(86400秒)を追加します)。ループの内側の部分では、曜日を取得するには... ...
date('N', $dayStamp)
を(mktimeなどを経て、再び)Unixタイムスタンプに各日付を変換してから使用したいです問題の日付について基本implementionとして
、これは次のようになります。あなたは、データベースのテーブルにこのような例外を保存する必要がありますので
<?php
function getWorkingDays($startDate, $endDate) {
$businessDays = array();
$businessDaysInWeek = range(1,5); // Only Monday to Friday
// Decompose the provided dates.
list($startYear, $startMonth, $startDay) = explode('-', $startDate);
list($endYear, $endMonth, $endDay) = explode('-', $endDate);
// Create our start and end timestamps.
$startStamp = mktime(1, 1, 1, $startMonth, $startDay, $startYear);
$endStamp = mktime(1, 1, 1, $endMonth, $endDay, $endYear);
// Check each day in turn.
for($loop=$startStamp; $loop<=$endStamp; $loop+=86400) {
if(in_array(date('N', $loop), $businessDaysInWeek)) {
// You'll also want to omit bank holidays, etc. in here.
$businessDays[] = date('Y-m-d', $loop);
}
}
return $businessDays;
}
print_r(getWorkingDays('2011-01-10', '2011-01-24'));
?>
ただし、あなたが最も可能性が高いにも/祝日などを省略する必要がありますルックアップ配列などを適宜チェックします。
ちなみに、5.1.0より前のバージョンのPHPを使用している場合は、date('w'...
を使用し、それに応じて曜日を調整する必要があります。 (それはゼロの代わりに、1からカウントします。)
でドキュメントを読むのに時間がかかることができます他の日も除外されていますか?) – Hamish