Sizzling Code
Sizzling Code

Reputation: 6070

PHP | count num of days for current month in a date range

i am trying to get dates of current month or any other month from a date range.

Let Suppose I have a Date Range as Below.

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

I want to count only days/dates of current month "February" which would result in 3 if start date and end date is above one.

but how can i make it work in a programming manner??

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

update:

I think i could not explain my question,

Lets Take the same date range..

if i want to programmatically take out days of December Month

it would be like

21 days, as start date is 2014-12-10;

Dates Are in Range Coming Programmatically from database..

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

UPDATE 2:

An other simple example

Lets Suppose If Leaves Have Been Approved For an Employee from 28-1-2015 to 6-2-2015

so Here Employees Leaves Taken Start Date Would Be

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

So Total Leaves Employee would be taking is

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

which would give me total leaves 9 or 10 days

But If We See, These Leaves Are Divided in Two Different Months. And i want to generate a Report and i want to see how many leaves employee has taken for specific month which is lets suppose last month January

it would be 4 days i suppose for below dates as below dates comes in date range and they belong to January.

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

so if i would like to have a result of array of every month leaves it would be like

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

I think thats the best i could explain..

Upvotes: 0

Views: 2196

Answers (4)

msfoster
msfoster

Reputation: 2572

Adjusted after update in question

Ok, now I have adjusted after your last update. Hope it is what you're looking for:

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

Upvotes: 1

SINGH
SINGH

Reputation: 397

It will help you: i m using this to get days

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

This will return you number of days.Is just you want this or something else.Please confirm if it will help you.

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

Upvotes: 0

Arun
Arun

Reputation: 760

Lets try this

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

Upvotes: 0

pavel
pavel

Reputation: 27082

Not sure if understood your question correctly,

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

Upvotes: 0

Related Questions