Время начала и окончания, разделенное на 1 час сегментов

У меня есть время начала и окончания в формате timestamp . Я хочу разбить их на временные интервалы, например, на 1 час.

 $t1 = strtotime('2010-05-06 12:00:00'); $t2 = strtotime('2010-05-06 18:00:00'); $timeslots = array(); while ($t1 < $t2) { $t1 = $t1 + 3600; $timeslots[] = $t1; } foreach ( $timeslots as $slot ) { echo date("Ymd H:i:s", $slot) . '<br/>'; } 

Это самый эффективный способ сделать это или есть лучший, более универсальный способ сделать это?

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

(Я строю систему бронирования)

Related of "Время начала и окончания, разделенное на 1 час сегментов"

Ты пробовал

 while ($t1 < $t2) { $t1 = strtotime('+1 hour', $t1); $timeslots[] = date('Ymd H:i:s', $t1); } foreach ( $timeslots as $slot ) { echo $slot . '<br/>'; } 

Совсем так же, но чище. И как было сказано, strtotime будет обрабатывать изменения даты, например, високосные годы. Каков ваш лимит памяти PHP? Может быть слишком мало.

Скорее, чем

 $t1 = $t1 + 3600; 

Вам будет лучше с

 $t1 = strtotime('+1 hour', $t1); 

Последний настроится на летнее время, високосные годы и т. Д.

В противном случае ваш код выглядит отлично. Если у вас закончилась память, это, вероятно, было связано с бесконечным циклом. Вероятно, вы захотите добавить код, чтобы убедиться, что $ t2 больше, чем $ t1, и переключать их, если они не являются.

используя php 5.3

 $dateTimes = new DatePeriod( new DateTime($start), new DateInterval('PT1H'), new DateTime($end) ); foreach ($dateTimes as $dt) { echo $dt->format('Ymd H:i:s'), "\n"; }