Guárdelo todo en la base de datos.
Desea tener una tabla de "Plantilla de tareas" y una tabla de "Tareas" donde haya una relación uno->muchos.
Cuando el usuario indique que desea que una tarea vuelva a ocurrir, cree un registro de "Plantilla de tareas" y luego cree tantas "Tareas" como el usuario haya indicado (no permita que un usuario cree tareas demasiado en el futuro). Cada tarea está vinculada a la plantilla de tareas a través de una clave externa. La idea es que SQL sea más eficiente en la gestión de estos registros que tratar de hacer todo esto en código basado en una plantilla. De esta manera, tendrá más opciones cuando clasifique y filtre sus datos. Después de todo, escribir una consulta SQL es más fácil que escribir, probar y mantener una función PHP que manipula los datos.
Algunos otros consejos que te daría son:
- Intente obtener mucha información en su registro de "Plantilla de tareas". Mantenga la cantidad de tareas que cubre la Plantilla, la fecha en que finaliza la última tarea, el tiempo transcurrido entre la primera tarea y la última, etc. Estos "Metadatos" pueden ayudarlo a ahorrar tiempo de consulta cuando busca ordenar y filtrar tareas.
- Ponga un índice en el campo Fecha y FK, esto también ayudará a consultar la hora.
- Acabo de crear dos aplicaciones de calendario en el trabajo que fueron muy bien recibidas por los jefes. Usé el complemento JQuery "FullCalendar" (http://arshaw.com/fullcalendar/). Utilicé JQuery AJAX para manejar la mayoría de mis eventos, y tenía soporte incorporado para la vista Mes, Día y Semana.