我需要一种在2个日期之间在PHP中创建“工作日”数组的方法。
例如:
getWorkingDays("2008-01-01","2009-06-30");
将创建如下数组:
Array
(
[0] ="2008-01-01",
[1] ="2008-01-05",
[2] ="2008-01-06",
[3] ="2008-01-07",
[4] ="2008-01-08",
[5] ="2008-01-09",
[6] ="2008-01-12",
[7] ="2008-01-13",
[8] ="2008-01-14",
...
)
答案 0 :(得分:1)
最简单的技术是创建一个从开始日期到结束日期的循环(你应该通过mktime将时间戳转换为时间戳,然后再添加一天(86400秒)来增加)。在循环的内部,您将每个日期转换为unix时间戳(再次通过mktime等),然后使用...
date('N', $dayStamp)
...获取相关日期的星期几。
作为基本实现,这看起来像:
<?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'));
?>
但是,您很可能还需要省略银行假期等,因此您应该将这些异常存储在数据库表/查找数组等中,以便根据需要进行检查。< / p>
顺便提一下,如果您使用的是早于5.1.0的PHP版本,则应使用date('w'...
并相应地调整您的星期几。 (它从零开始而不是一个。)
答案 1 :(得分:-1)
使用基本的php日期功能,您可以制作它,花时间阅读PHP date
上的文档