PHP日期计算两天之间的日期

时间:2014-11-19 03:40:06

标签: php date datetime-format

我希望得到周末数和商业日数我只知道$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

5 个答案:

答案 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
}