标题是非常自明的。鉴于两个日期的最佳方式是什么,找到数星期天使用PHP?星期天是星期一至星期五。

例如,我怎么会发现,有10个星期天之间 31/08/200813/09/2008?

有帮助吗?

解决方案

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

其他提示

如果你正在创建一个开发票的系统,你认为有关银行假、复活节等。它不是简单的计算。

最好的解决方案我见过是来预生成一个表与天及其类型,以SQL数据库(行每天=365行每年),然后进行简单的计查询适当的选择(在条款)。

你可以找到这种解决方案全面的描述 乔Celko的思维集:辅助、临时和虚拟中的表SQL

一方式将转换的日期unix timestamps使用strtotime(...),减去结果和div'ing与86400(24*60*60):

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

ETA:哦..你的意思是,平日作为在周一至周五..没看到,在第一次..

最好的方法是循环的所有日期间给定的日期范围,并得到一天的,每周每个日期。如果它是一个星期天,增加某些计数器。在结束过程你得到的数工作日。

PHP功能mktime()and date()(使用的UNIX timestamps)都是你的朋友在这里。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top