题
标题是非常自明的。鉴于两个日期的最佳方式是什么,找到数星期天使用PHP?星期天是星期一至星期五。
例如,我怎么会发现,有10个星期天之间 31/08/2008
和 13/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;
其他提示
如果你正在创建一个开发票的系统,你认为有关银行假、复活节等。它不是简单的计算。
最好的解决方案我见过是来预生成一个表与天及其类型,以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)都是你的朋友在这里。
不隶属于 StackOverflow