patternphpMinor
PHP First Friday Display Improvement?
Viewed 0 times
phpfridayfirstimprovementdisplay
Problem
I have an event recurring on the first friday of the month (at 7pm), and I need to output the date of the next first friday coming up.
This is the first bit of PHP I've written, and I was wondering if there is a better way to implement this? Server is running PHP 5.3
Here's what I wrote:
And here is a suggested improvement offered by someone else, which also introduced me to ternary operators:
I had looked all over for a short way to do this and was only running into very large and complicated answers. Both my way and the answer provided by someone else are much much shorter and more readable.
This is the first bit of PHP I've written, and I was wondering if there is a better way to implement this? Server is running PHP 5.3
Here's what I wrote:
$todays_date = strtotime('today');
$first_friday = strtotime('first friday of this month');
if ($todays_date > $first_friday) {
$next_month = date('M j', strtotime('first friday of next month'));
echo 'Friday, '.$next_month;
} elseif ($todays_date == $first_friday) {
echo 'Today';
} else {
$this_month = date('M j', strtotime('first friday of this month'));
echo 'Friday, '.$this_month;
}And here is a suggested improvement offered by someone else, which also introduced me to ternary operators:
$today = new DateTime();
$this_months_friday = new DateTime('first friday of this month');
$next_months_friday = new DateTime('first friday of next month');
echo ($today format('M j').' at 7pm' : 'Friday, '.$next_months_friday->format('M j').' at 7pm';I had looked all over for a short way to do this and was only running into very large and complicated answers. Both my way and the answer provided by someone else are much much shorter and more readable.
Solution
You can improve your ternary operator by using it like this :
which can them become :
$today = new DateTime();
$this_months_friday = new DateTime('first friday of this month');
$next_months_friday = new DateTime('first friday of next month');
echo 'Friday, '. (($today format('M j') : $next_months_friday->format('M j')) . ' at 7pm';which can them become :
echo 'Friday, '. (($today format('M j') . ' at 7pm';Code Snippets
$today = new DateTime();
$this_months_friday = new DateTime('first friday of this month');
$next_months_friday = new DateTime('first friday of next month');
echo 'Friday, '. (($today < $this_months_friday) ? $this_months_friday->format('M j') : $next_months_friday->format('M j')) . ' at 7pm';echo 'Friday, '. (($today < $this_months_friday) ? $this_months_friday : $next_months_friday)->format('M j') . ' at 7pm';Context
StackExchange Code Review Q#20846, answer score: 2
Revisions (0)
No revisions yet.