Solved

PHP Date Object, Find last friday in a month

Posted on 2008-06-10
1,194 Views
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
Question by:tim_carter
• 3
• 2

LVL 1

Author Comment

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

LVL 108

Accepted Solution

Ray Paseur earned 250 total points
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;

}
``````
0

LVL 25

Assisted Solution

Squinky earned 250 total points
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";

?>
``````
0

LVL 108

Expert Comment

@Squinky: Very cool!  strtotime() is sheer genius! ~Ray
0

LVL 1

Author Closing Comment

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

LVL 108

Expert Comment

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

Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this.Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it is …
This article discusses four methods for overlaying images in a container on a web page
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to count occurrences of each item in an array.