我希望得到周末数和商业日数我只知道$startDate
和$endDate
,是否有任何可以自动计算的PHP函数?
这是我的代码:
$endDate = strtotime($endDate);
$startDate = strtotime($startDate);
echo $days = ($endDate - $startDate) / 86400 + 1;
我的代码将返回多少天,我需要更多的是什么日子? 我怎么能得到它?
示例:
startDate:`2014-11-17`
endDate:`2014-11-19`
我想要这个输出:
it's 3 day
2014-11-17 is Monday
2014-11-18 is Tueday
2014-11-19 is Wendnesday
答案 0 :(得分:1)
怎么样......
for ($time = $startDate; $time <= $endDate; $time += 86400) {
echo date('Y-m-d \i\s l', $time) . '<br>';
}
答案 1 :(得分:0)
这可能会对您有所帮助,或者至少可能会给您一些线索
$endDate = strtotime($endDate);
$startDate = strtotime($startDate);
echo $days = ($endDate - $startDate) / 86400 + 1;
$time = $startDate;
while ($time <= $endDate) {
echo date('Y-m-d', $time) . ' is ' . date('l', $time);
$time += 86400;
}
if ($time != $endDate) {
echo date('Y-m-d', $time) . ' is ' . date('l', $time);
}
答案 2 :(得分:0)
这应该适合你:
<?php
$startDate = strtotime("2014-11-17");
$endDate = strtotime("2014-11-19");
echo "It's " . $days = ($endDate - $startDate) / 86400 + 1 . " days";
for($count = 0; $count < $days; $count++)
echo "<br />" . date('Y-m-d', strtotime('+' . $count . ' day', $startDate)) . ' is ' . date('l', strtotime('+' . $count . ' day', $startDate));
?>
输出:
It's 3 days
2014-11-17 is Monday
2014-11-18 is Tuesday
2014-11-19 is Wednesday
答案 3 :(得分:0)
没有内置功能。 Excel有NETWORKDAYS(),但在PHP中你必须自己动手。
Day difference without weekends有一个PHP解决方案 请注意其中的注释限制,例如:如果公众假期是在周末进行的。
以下页面介绍了NETWORKDAYS()的替代实现:http://www.cpearson.com/excel/betternetworkdays.aspx 它不是PHP,但它证明了逻辑。
不幸的是,除了在这段时间内每天循环并决定是否计算它之外,没有捷径。您需要接受(或硬编码)周末日和任何公共假日日期的参数(如果您排除公共假期)。
如果您经常长时间这样做,您可以预先计算并缓存每个日历月份和年份的工作日数;然后,在运行时,您查看该期间内每一年的天数,然后查看剩余的整个月份,然后在该期间的开始和结束时查看剩余天数的普通循环。
编辑:如果您只想排除周末(非公众假期),那么您可以计算该期间每一周的5天,然后计算任何剩余天数:https://github.com/bgarlock/scripts/blob/master/PHP%20Equivalent%20of%20MS%20Excel%20NETWORKDAYS%20function.php
答案 4 :(得分:-1)
请查看以下代码我相信它适合您
注意:传递P1D的参数表示1天差异,同样地,您可以通过P1M 1个月P1W持续1周,P1Y持续1年。
$date1 = '29/08/2013';
$date2 = '03/09/2013';
function returnDates($fromdate, $todate) {
$fromdate = \DateTime::createFromFormat('d/m/Y', $fromdate);
$todate = \DateTime::createFromFormat('d/m/Y', $todate);
return new \DatePeriod(
$fromdate,
new \DateInterval('P1D'),
$todate->modify('+1 day')
);
}
$datePeriod = returnDates($date1, $date2);
foreach($datePeriod as $date) {
echo $date->format('d/m/Y'), PHP_EOL; //you can set any date format here
}