PHP |计算日期范围内当月的天数

时间:2015-02-03 13:08:43

标签: php date

我想从日期范围中获取当月或任何其他月份的日期。

假设我有一个日期范围如下。

$startDate = "2014-12-10";
$endDate = "2015-2-3";

我想只计算当月的日期/日期"February" 如果开始日期和结束日期高于1,则会产生3。

但是如何让它以编程方式工作?

- == - == - == - =

更新

我想我无法解释我的问题,

让我们采取相同的日期范围..

如果我想以编程方式取出12月份的日子

就像

21天,因为开始日期为2014-12-10;

日期在数据库中以编程方式进入范围..

- = - == - == - == - =

更新2:

另一个简单的例子

让我们假设从28-1-20156-2-2015

的员工已批准离职

所以这里的员工离开了开始日期

$sartDate = '28-1-2015';
$endDate = '6-2-2015';

所以Total Leaves Employee将会采取

$totalleaves = $endDate - $startDate //It is not right way to take out the differece only For sake of Example shown it

这会给我总叶910

但如果我们看到,这些叶子在两个不同的月份分开。 我想生成一份报告,我想知道员工在特定月份花了多少叶子,这可以假设上个月January

我认为对于以下日期将是4天,因为以下日期在日期范围内,并且它们属于1月。

28-1-2015
29-1-2015
30-1-2015
31-1-2015

所以如果我希望每个月都有一个数组的结果就可以了 就像

array(
'January' => array(
 'TotalLeavesTaken' => 4
),
'February' => array(
'TotalLeavesTaken' => 6
)
);

我认为这是我能解释的最好的事情。

4 个答案:

答案 0 :(得分:1)

有问题的更新后调整

好的,现在我在上次更新后进行了调整。希望这是你正在寻找的:

function getLeavesInPeriod($start, $end) {

    $date = new DateTime($start);
    $endDate = new DateTime($end);

    $leaves = array();

    while($date <= $endDate ) {
        $year = $date->format('Y');
        $month = $date->format('M');        

        if(!array_key_exists($year, $leaves))
            $leaves[$year] = array();
        if(!array_key_exists($month, $leaves[$year]))
            $leaves[$year][$month] = 0;

        $leaves[$year][$month]++;
        $date->modify("+1 day");
    }
    return $leaves;
}

$leaves = getLeavesInPeriod("2015-1-5", "2015-2-3");
print $leaves[2015]["Jan"]; //27

答案 1 :(得分:0)

不确定是否正确理解了您的问题,

date('d', strtotime($endDate));

答案 2 :(得分:0)

  

让我们试试这个

$month = strtotime(date('Y-m-01', time()));
$daysCount = (int)(time() - $month) / (24 * 3600);

答案 3 :(得分:0)

它会帮助你:我用这个来度过几天

$date_diff = $end_date - $start_date;
//difference of two  dates

这将返回您的天数。只是您想要这个或其他。请确认它是否会对您有所帮助。

$days_left = floor($date_diff / (60*60*24));// No. of days