0

我需要一种在 PHP beteewn 2 日期中创建“工作日”数组的方法。

例如:

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",
    ...
) 
4

2 回答 2

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'));

?>

但是,您很可能还需要省略银行假期等,因此您应该将此类异常存储在数据库表/查找数组等中,以便酌情检查它们。

顺便说一句,如果您使用的是早于 5.1.0 的 PHP 版本,您应该date('w'...相应地使用和调整您的星期几。(它从零而不是一开始计数。)

于 2011-01-21T18:07:05.623 回答
-1

使用基础的 php date 函数,您可以制作它,花时间阅读PHP date的文档

于 2011-01-21T18:07:42.853 回答