В настоящее время я разрешаю ежедневные или еженедельные повторения событий в приложении календаря (с использованием fullCalendar).
В моем представлении есть флажок, который активирует два раскрывающихся списка: один для интервала повторения (ежедневно, еженедельно) и один для частоты (один раз, два раза и т. Д.).
$evt_interval_options = array( //this will be $row->interval in the model
'86400' => 'Daily',
'604800' => 'Weekly';
$evt_frequency_options = array( //this will be //$i in the model
'1' => '2',
'2' => '3',
<?php echo form_checkbox('evt_repeat', 'FALSE', FALSE, 'class="repeat_checkbox"');
echo form_dropdown('evt_interval', $evt_interval_options');
echo form_dropdown('evt_frequency', $evt_frequency_options'); ?>
Это в конечном итоге достигает моей модели, которая запускает цикл, проверяющий, должно ли событие повториться - если это так, он будет учитывать интервал ($row->interval
) и частоту ($i
).
$cal_data[] = array(
'start' => strtotime($row->date_1 . ' ' . $row->time_1) + ($i ? ($row->interval * $i) : 0),
);
Это прекрасно работает для отображения нескольких ежедневных или еженедельных событий на основе одной записи в базе данных.
Проблема с ежемесячными и ежегодными. Так как они будут иметь переменное количество секунд, потому что
03/01/2011 00:00:00 --> 04/01/2011 00:00:00 ===> 2674800 seconds
04/01/2011 00:00:00 --> 05/01/2011 00:00:00 ===> 2592000 seconds
and so on for monthly and yearly differences
Так как мне решить эту проблему? Есть ли какая-либо функция или команда strtotime
, которая может помочь точно указать, что месячные должны повторяться, например, 4th
или годовой должен повторяться July 4th
?
Я использую PHP 5.2.14.