Мне кажется, что вы собираетесь использовать это в цикле, который отображает количество событий, и ваш код будет далеко не оптимальным в этой ситуации.
Я думаю, вы можете уменьшить эту строку:
if( date('n',strtotime($event['Event']['start_day']) ) == date('n',strtotime($event['Event']['end_day'])) )
)
до:
if($event['Event']['start_day']==$event['Event']['end_day'])
(или что-то подобное, сравнивающее сохраненное значение без форматирования. Форматирование предназначено для отображения, а не для алгоритмического сравнения)
и это:
date('j',strtotime($event['Event']['end_day'])).' '.date('M',strtotime($event['Event']['end_day']));
до:
date('j M',strtotime($event['Event']['end_day']));
... и аналогичные правки в других местах. Если это в цикле, вам нужно уменьшить количество ненужных вызовов функций и избежать объединения строк.
Лично, поскольку это функция отображения, я бы держал ее в стороне от просмотра (в отличие от контроллера) и, вероятно, сделал бы это как элемент с переданными параметрами - см. http://book.cakephp.org/view/560/Passing-Variables-into-an-Element