鉴于两个日期,找到PHP工作日数量的最佳方法是什么?

时间:2008-09-17 06:28:37

标签: php date

标题几乎是自我解释的。鉴于两个日期,使用PHP查找工作日数的最佳方法是什么?周日是周一至周五。

例如,我如何才能发现31/08/200813/09/2008之间有10周的工作日?

4 个答案:

答案 0 :(得分:3)

        $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;

从这里开始:http://www.addedbytes.com/php/php-datediff-function/

答案 1 :(得分:2)

如果要创建发票系统,则必须考虑银行假日,复活节等。计算它并不简单。

我见过的最好的解决方案是将带有日期及其类型的表预生成到SQL数据库(每天行数=每年365行),然后使用正确的选择(WHERE子句)执行简单的计数查询。

您可以在 Joe Celko的集合思考:SQL中的辅助,时态和虚拟表

中找到完整描述的解决方案

答案 2 :(得分:0)

一种方法是使用strtotime(...)将日期转换为unix时间戳,减去结果并使用86400(24 * 60 * 60)进行div'ing:

$dif_in_seconds = abs(strtotime($a) - strtotime($b));
$daysbetween = $dif_in_seconds / 86400;

ETA:哦......你的工作日就像周一至周五一样..起初没看到..

答案 3 :(得分:0)

最好的方法是迭代给定日期范围之间的所有日期,并获取每个日期的星期几。如果是一周工作日,请增加某个计数器。在流程结束时,您将获得工作日的数量。

PHP函数mktime()和date()(用于处理UNIX时间戳)是你的朋友。