Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1240
  • Last Modified:

PHP Date Object, Find last friday in a month

Hi Guys

I need to find out what date the last friday in a month is. Is there a way of doing this with php?

Thanks
0
tim_carter
Asked:
tim_carter
  • 3
  • 2
2 Solutions
 
tim_carterAuthor Commented:
I found out a way my self. Thanks

$NumberOfDaysInCurrentMonth=cal_days_in_month(CAL_GREGORIAN,$Month,$Year);
      
      $LastFridayIs = 0;
      for ($i=1;$i<$NumberOfDaysInCurrentMonth;$i++){
            $DayNameTemp = date("D", mktime(0, 0, 0, $Month, $i, $Year));
            if($DayNameTemp=='Fri')
                  $LastFridayIs = $i;
      }
      echo "LastFridayIs=".$LastFridayIs."<br>";
0
 
Ray PaseurCommented:
Hey, Tim.  Even tho you already solved it, I thought it was a good exercise so I did it this way. I have a friend who hosts a party on the fifth Friday.  Now I can mark my calendar in advance! ~Ray
<?php // RAY_lastfriday.php -- Find Last Friday in a Month
/* ********************************************************************** */
function last_friday($date) {
 
// GET A VALID TIMESTAMP IN CASE THE GIVEN DATE IS BOLLIXED
	if (!$now = strtotime($date)) { $now = strtotime('today'); }
 
// GET SECONDS IN A DAY FOR TIMESTAMP CALCULATIONS
	$one_day	= 60*60*24;
 
// GET THE NUMBER OF THE CURRENT MONTH
	$my_month	= date("n", $now);
 
// GET THE TIMESTAMP OF THE LAST DAY OF THE CURRENT MONTH
	$last_day	= mktime(0,0,0, date("m", $now)+1, 0, date("Y", $now));
 
	$fridays	= array();
	while (2 > 1) { // LOOP ENDS ON BREAK WHEN MONTH CHANGES
		$last_date	= date("D", $last_day);
		if ($last_date == 'Fri') {
			$last_month	= date('n', $last_day);
			if ($last_month != $my_month) {
				break;
			} else {
				$fridays[] = date('Y-m-d D', $last_day);
			}
		}
		$last_day	= $last_day - $one_day;
	}
return $fridays;
}
/* ********************************************************************** */
 
echo "<pre>\n";
 
/* USAGE */
 
/* FIND THE LAST FRIDAY IN THE CURRENT MONTH */
$my_fridays = last_friday('now');
print_r($my_fridays[0]);
 
echo "\n\n";
 
/* FIND ALL THE FRIDAYS IN ANOTHER MONTH */
/* NOTE THE ARRAY IS IN REVERSE CHRONOLOGICAL ORDER - YOU MIGHT WANT array_reverse(); */
$my_fridays = last_friday ('February 4, 2008');
print_r($my_fridays);
 
echo "\n\n";
 
/* FIND THE MONTHS IN THIS YEAR WITH FIVE FRIDAYS AND PRINT THE DATE OF THE FIFTH FRIDAY */
$month = 1;
while ($month < 13) {
	$my_fridays = last_friday(date('Y') .'-'. $month . '-1');
	if (count($my_fridays) == 5) {
		echo "$my_fridays[0] \n";
	}
	$month	= $month + 1;
}

Open in new window

0
 
Marcus BointonCommented:
I think I have a neater one, no loops or string matching required:
<?php
function lastfriday($date) {
	//Find first day of following month
	$nextmonth = strtotime(date('Y-m-01', strtotime("$date +1 month")));
	//Now find the friday before that
	$lastfriday = date('Y-m-d', strtotime('last Friday', $nextmonth));
	return $lastfriday;
}
 
echo lastfriday('2008-06-07')."\n";
?>

Open in new window

0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
Ray PaseurCommented:
@Squinky: Very cool!  strtotime() is sheer genius! ~Ray
0
 
tim_carterAuthor Commented:
Thanks guys. Awesome ;) I just found out about the strtotime yesterday.. If only knew about that earlier, it could have saved me so much thinking ;)
0
 
Ray PaseurCommented:
Right, strtotime() always beats thinking for me!  

You might enjoy some of the books from SitePoint:
http://www.sitepoint.com/books/library/

They are usually pretty good.  Happy coding!
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now