gskartwii
gskartwii

Reputation: 389

Calculate day of month with month, year, day of week and number of week

How can I calculate the day of month in PHP with giving month, year, day of week and number of week.
Like, if I have September 2013 and day of week is Friday and number of week is 2, I should get 6. (9/6/2013 is Friday on the 2nd week.)

Upvotes: 4

Views: 514

Answers (3)

letiagoalves
letiagoalves

Reputation: 11302

This way its a little longer and obvious but it works.

/* INPUT */
$month = "September";
$year = "2013";
$dayWeek= "Friday";
$week = 2;

$start = strtotime("{$year}/{$month}/1"); //get first day of that month
$result = false;
while(true) { //loop all days of month to find expected day
    if(date("w", $start) == $week && date("l", $start) == $dayWeek) {
        $result = date("d", $start);
        break;
    }
    $start += 60 * 60 * 24;
}

var_dump($result); // string(2) "06"

Upvotes: 0

Jason McCreary
Jason McCreary

Reputation: 72981

One way to achieve this is using relative formats for strtotime().

Unfortunately, it's not as straightforward as:

strtotime('Friday of second week of September 2013');

In order for the weeks to work as you mentioned, you need to call strtotime() again with a relative timestamp.

$first_of_month_timestamp = strtotime('first day of September 2013');
$second_week_friday = strtotime('+1 week, Friday', $first_of_month_timestamp);
echo date('Y-m-d', $second_week_friday); // 2013-09-13

Note: Since the first day of the month starts on week one, I've decremented the week accordingly.

Upvotes: 4

Ja͢ck
Ja͢ck

Reputation: 173562

I was going to suggest to just use strtotime() in this fashion:

$ts = strtotime('2nd friday of september 2013');
echo date('Y-m-d', $ts), PHP_EOL;
// outputs: 2013-09-13

It seems that this is not how you want the calendar to behave? But it is following a (proper) standard :)

Upvotes: 3

Related Questions