March 11, 2009

Calculating Week of the Month from a given date [ PHP ]

Let first understand the problem. In the following fig. we have 2 months calendar of March 2009 to April 2009.

Now 31st March and 1st April, both dates belong to 14th Week of the Year, but in Week of the Month Calculation 31st March will be 5th Week of March and 1st April will be 1st Week of April. There is no such format is available for PHP date() function , so we will calculate the Week of the Month Programmatically.

Test Case: the program should return 1st week of March and 2nd Week of April respectively for given dates (dd/mm/yyyy) 07/03/2009 and 07/04/2009.

The Week of the Month can be determined by following equation










We can implement the equation in a PHP function as bellow

function getWeekOfTheMonth($dateTimestamp)
{
$d = date('j',$ dateTimestamp);
$w = date('w',$ dateTimestamp)+1; //add 1 because date returns value between 0 to 6
$dt= (floor($dayOfMonth % 7)!=0)? floor($dayOfMonth % 7) : 7;
$k = (($w-$dt) < style="">
$W= ceil(($dayOfMonth+$k)/7);
return $W ;
}

Now check the function with Test Cases.
For 07/03/2009 or 7th March 2009:
$dateTimestamp = mktime(0,0,0,3,7,2009);
echo getWeekOfTheMonth($dateTimestamp) ." week of ".date(F,$dateTimestamp);

and the o/p is
1 week of March
For 07/04/2009 or 7th April 2009
$dateTimestamp = mktime(0,0,0,4,7,2009);
echo getWeekOfTheMonth($dateTimestamp) ." week of ".date(F,$dateTimestamp);

and the o/p is
2 week of April


(c) Sourav Ray Creative Commons License