I worked with an agenda a few days ago, the logic is as follows:
Give the start date and end date option.
Make a query in the bank searching the schedules:
$sql = "SELECT * FROM agendamento WHERE data_inicio >= CURDATE();
Make a structure that mounts these weekly occurrences:
$eventos = Array();
foreach ($res as $row){
if ($row['semanal'] == 1){
$data_inicio = $row['data_inicio'];
$data_fim = $row['data_fim'];
// Calcule o intervalo das datas em dias
$intervalo == IntervaloDias($data_inicio, $data_fim);
// Data do evento (atual)
$data = $data_inicio;
for($i = 0; $i < $intervalo; $i++){
$eventos[] = Array(
'data_inicio' => $data,
'data_fim' => $data,
'hora_inicio' => $row['hora_inicio'],
'hora_fim' => $row['hora_fim']
);
// Adicione um dia para próxima data
$data = AddDia($data);
}
} else {
// Outros tipos de evento
$eventos[] = Array(
'data_inicio' => $row['data_inicio'],
'data_fim' => $row['data_fim'],
'hora_inicio' => $row['hora_inicio'],
'hora_fim' => $row['hora_fim']
);
}
}
If the user does not want an end date, put a date limitation in the code, example:
$maxdata = AddDia(Date(), 2*365); // Data máxima 2 anos
foreach ($res as $row){
$data_inicio = $row['data_inicio'];
$data_fim = empty($row['data_fim']) ? $maxdata : $row['data_fim'];
// Calcule o intervalo das datas em dias
$intervalo == IntervaloDias($data_inicio, $data_fim);
Case did not want the weekend days:
// Adicione um dia para próxima data
$data = AddDia($data);
if (date( "w", $data) == 6){ // Sábado
$data = AddDia($data, 2); // Vai para segunda feira
}