Had the same need recently, and the best I could come up with is the following, which is meant to be run every day to check if the current day is the last weekday of the current month:
<?php
$d = new DateObject('first day of this month', date_default_timezone());
$d->modify("+15 days");
$d->modify("first day of next month -1 weekday");
$last = date_format($d, 'd');
$today = new DateObject('today', date_default_timezone());
$today = date_format($today, 'd');
if ($today == $last) {
//bingo
}
?>
I have been testing and so far couldn't find an example where this fails. The reason for doing the modify("+15 days") in the middle is to be sure we are calling "next month" with a starting date that is not in the edge between two months, case where I believe this could fail.
Leaving the code shown before apparently covers all cases.