Получение интервалов времени

Задача
Необходимо знать все дни недели или месяца. Например, требуется вывести на печать список встреч на протяжении недели.

Решение
Определите начальную дату с помощью функции time() и strftime(). Если интервал имеет фиксированную длину, то можно выполнить цикл по дням этого интервала. Если нет, то необходимо проверять каждую подпоследовательность дней на принадлежность к требуемому диапазону. Например, в неделе семь дней, поэтому для выработки дней текущей недели можно выполнить фиксированный цикл:

// генерация интервала времени для этой недели
$now = time();
// Если это время до 3 AM, увеличьте $now на 1, чтобы не беспокоиться
// о DST при движении обратно к началу недели.
if (3 < strftime('%H', $now)) { $now += 7200; }
// Какой сегодня день недели?
$today = strftime('%w', $now);
// Сколько дней назад началась неделя?
$start_day = $now - (86400 * $today);
// Вывод каждого дня недели
for ($i = 0; $i < 7; $i++) {
print strftime('%c',$start_day + 86400 * $i);
}

Обсуждение
Отдельный месяц или год может иметь различное число дней, поэтому необходимо определить конец временного диапазона, учитывая особенности данного месяца или года.


Чтобы выполнить цикл по всем дням месяца, определите метку времени для первого дня этого месяца и для первого дня следующего месяца. Переменная цикла $day содержит день, увеличивающийся на определенное время (86 400 секунд), пока он не превысит метку времени начала следующего месяца:

// Генерирует временной интервал для месяца
$now = time();
// Если это до 3 AM, увеличьте $now на 1 так, чтобы не беспокоиться
// о DST при движении обратно к началу недели.
if (3 < strftime('%H', $now)) { $now += 7200; }
// Какой сегодня день недели?
$this_month = strftime('%m',$now);
// Метка времени полуночи первого дня этого месяца
$day = mktime(0,0,0,$this_month,1);
// Метка времени полуночи первого дня следующего месяца
$month_end = mktime(0,0,0,$this_month+1,1);
while ($day < $month_end) {
print strftime('%c',$day);
$day += 86400;
}

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Вывод на печать даты и времени в определенном формате
Выделение дат и времен из строк
Выработка высокоточного времени
Определение дня недели, месяца, года или номера недели в году
Определение разности между датами юлианского календаря

Вернуться в раздел: PHP / 3. Дата и время