All pastes #885551 Raw Edit

Miscellany

public text v1 · immutable
#885551 ·published 2008-01-30 23:28 UTC
rendered paste body
/**
 * Return an array of the timestamps of the start of each week that falls partially in the 
 * provided month. monday is the first day of the week.
 * @param integer $month The week number of the year
 * @param integer $year The year of the week we need to calculate on 
 * @return array of integers, each a unix timestamp
 * @author tim@e2-media.co.nz
 */
function month_get_weeks($month, $year) {
	
	////////////////////////////////////////////////////
	// get an array of all weeknums falling in the month
	$weeknums = array();
	// go through all days in month
	for($day=1;$day<32;$day++) {
		// calculate timestamp
		$ts = mktime(0,0,0,$month,$day,$year);	
		
		// is it inside the month? if not, skip to end 
		if(date('n',$ts) != $month) continue;
		
		// calculate weeknum for this day
		$weeknum = date('W',$ts);
		
		// adjust weeknum if right at start of year
		$dayofyear = date('z',$ts);
		$dayofweek = (date('w',$ts)+6)%7; // adjustment because 'w' is 0-based at Sunday
		if($dayofweek >= $dayofyear) $weeknum = 0;
		
		$weeknums[] = $weeknum;
	}
	// trim dupes
	$weeknums = array_unique($weeknums);
	
	/////////////////////////////////////////////////////
	// build array of start timestamps
	$weekstarts = array();
	foreach($weeknums as $weeknum) {
		$weekstarts[$weeknum] = find_first_day_ofweek($weeknum, $year);
	}
	return $weekstarts;
}

/**
 * Function to find the day of a week in a year
 * @param integer $week The week number of the year
 * @param integer $year The year of the week we need to calculate on
 * @param string  $start_of_week The start day of the week you want returned
 *                Monday is the default Start Day of the Week in PHP. For 
 *                example you might want to get the date for the Sunday of wk 22
 * @return integer The unix timestamp of the date is returned
 * @author from jefferyfernandez.id.au http://nz.php.net/manual/en/function.mktime.php  
 */
function find_first_day_ofweek($week, $year)
{
   // Get the target week of the year with reference to the starting day of
   // the year
   $target_week = strtotime("$week week", strtotime("1 January $year"));

   // Get the date information for the day in question which
   // is "n" number of weeks from the start of the year
   $date_info = getdate($target_week);

   // Get the day of the week (integer value)
   $day_of_week = $date_info['wday'];

   $adjusted_date = $day_of_week-1;
          
   // Get the first day of the weekday requested
   $first_day = strtotime("-$adjusted_date day",$target_week);

   //return date('l dS of F Y h:i:s A', $first_day);

   return $first_day;
}