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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access