最簡單的方法是創建從起始日期到結束日期的循環(你應該隱蔽都通過mktime時間戳,然後添加一天(86400秒)增量)。在循環的內部,你會每個日期轉換爲Unix時間戳(再次通過mktime等),然後使用...
date('N', $dayStamp)
...拿到星期幾有關日期。
作爲一個基本的FPGA實現,這將是這樣的:
<?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'...
並相應地調整您的星期幾。 (它從零,而不是一個計數。)
什麼資格作爲一個營業日(只是週一至週五,或閱讀文檔是否也排除了其他日子?) – Hamish 2011-01-21 18:10:41