3.14. Generating Time Ranges
Problem
You need to know all the days in a week or a month. For example, you want to print out a list of appointments for a week.
Solution
Identify your start date using time( )
and strftime( )
. If
your interval has a fixed length, you can loop through that many
days. If not, you need to test each subsequent day for membership in
your desired range.
For example, a week has seven days, so you can use a fixed loop to generate all the days in the current week:
// generate a time range for this week $now = time(); // If it's before 3 AM, increment $now, so we don't get caught by DST // when moving back to the beginning of the week if (3 < strftime('%H', $now)) { $now += 7200; } // What day of the week is today? $today = strftime('%w', $now); // How many days ago was the start of the week? $start_day = $now - (86400 * $today); // Print out each day of the week for ($i = 0; $i < 7; $i++) { print strftime('%c',$start_day + 86400 * $i); }
Discussion
A particular month or year
could have a variable number of days, so you need to compute the end
of the time range based on the specifics of that month or year. To
loop through every day in
a month, find the epoch timestamps for the first day of the month and
the first day of the next month. The loop variable,
$day
is incremented a day at a time (86400
seconds) until it’s no longer less than the epoch
timestamp at the beginning of the next month:
// Generate a time range for this month $now = time(); // If it's ...
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.