Estou tentando desenhar uma lógica para implantar um sistema que visualiza disponibilidade de apartamentos com reservas de locação de temporada, minha tabela tem 4 campos, id, id_apto, data_inicio, data_fim e queria mostrar em um calendário quais dias que os aptos estarão ocupados, porém não consegui nada tentei fazer por consulta SQL via cláusula BETWEEN e nada, alguém poderia me ajudar numa lógica simples, pois pensar é fácil, mas implantar em código está complicado para mim.
Até agora o que consegui é o que está abaixo e agora não apresenta mais nada no calendário, só da - nos dias.
<?
if ($dados[tipo] == "Locação Temporária") {
?>
<tr>
<td style="border-bottom: 1 solid #000000">
<p class="subtitulo">Disponibilidade do imóvel</td>
</tr>
<tr>
<td>
<?
//Funções
function UltimoDia($ano,$mes){
if (((fmod($ano,4)==0) and (fmod($ano,100)!=0)) or (fmod($ano,400)==0)) {
$dias_fevereiro = 29;
} else {
$dias_fevereiro = 28;
}
switch($mes) {
case 01: return 31; break;
case 02: return $dias_fevereiro; break;
case 03: return 31; break;
case 04: return 30; break;
case 05: return 31; break;
case 06: return 30; break;
case 07: return 31; break;
case 08: return 31; break;
case 09: return 30; break;
case 10: return 31; break;
case 11: return 30; break;
case 12: return 31; break;
}
}
// Fim funções
// Variáveis
$ano = date("Y");
$cont = 0;
$dia = date("d");
$dias = array();
$mes = date("m");
$totalDias = date("t");
$primeiroDia = date("D", mktime(0, 0, 0, $mes, 1, $ano));
$diaprimeiro = "01";
$diafinal = UltimoDia($ano,$mes);
$data_inicio = $ano."-".$mes."-".$diaprimeiro;
$data_fim = $ano."-".$mes."-".$diafinal;
$dias_reservas = array();
// Fim Variáveis
for($d = 0; $d < $totalDias; $d++)$dias[$d] = array_push($dias, $d+1);
$sql1 = mysql_query("SELECT * FROM reservas WHERE data_inicio BETWEEN '$data_inicio' AND '$data_fim' AND id_imovel = '$imovel'");
while($reserva = mysql_fetch_array($sql1, MYSQL_ASSOC)) {
//defino data 1
$ano1 = substr($reserva[data_inicio],0,4);
$mes1 = substr($reserva[data_inicio],5,2);
$dia1 = substr($reserva[data_inicio],7,2);
//defino data 2
$ano2 = substr($reserva[data_fim],0,4);
$mes2 = substr($reserva[data_fim],5,2);
$dia2 = substr($reserva[data_fim],7,2);
//calculo timestamp das duas datas
$timestamp1 = mktime(0,0,0,$mes1,$dia1,$ano1);
$timestamp2 = mktime(4,12,0,$mes2,$dia2,$ano2);
//diminuo a uma data a outra
$segundos_diferenca = $timestamp1 - $timestamp2;
//converto segundos em dias
$dias_diferenca = $segundos_diferenca / (60 * 60 * 24);
//obtenho o valor absoluto dos dias (tiro o possível sinal negativo)
$dias_diferenca = abs($dias_diferenca);
//tiro os decimais aos dias de diferenca
$dias_diferenca = floor($dias_diferenca);
for($t = 0; $t < $dias_diferenca; $t++)$dias_reservas[$t] = array_push($dias_reservas, $t+1);
}
print_r($dias_reservas);
switch($primeiroDia){
case "Sun":
$pos = 0;
break;
case "Mon":
$pos = 1;
break;
case "Tue":
$pos = 2;
break;
case "Wed":
$pos = 3;
break;
case "Thu":
$pos = 4;
break;
case "Fri":
$pos = 5;
break;
case "Sat":
$pos = 6;
break;
}//Fim do switch
switch($mes){
case 1:
$mes2 = "Janeiro";
break;
case 2:
$mes2 = "Fevereiro";
break;
case 3:
$mes2 = "Março";
break;
case 4:
$mes2 = "Abril";
break;
case 5:
$mes2 = "Maio";
break;
case 6:
$mes2 = "Junho";
break;
case 7:
$mes2 = "Julho";
break;
case 8:
$mes2 = "Agosto";
break;
case 9:
$mes2 = "Setembro";
break;
case 10:
$mes2 = "Outubro";
break;
case 11:
$mes2 = "Novembro";
break;
case 12:
$mes2 = "Dezembro";
break;
}//Fim do switch
echo "<table align='center' border=1 cellspacing=0 cellpadding=0>";
echo "<tr><td bgColor='cyan' colspan=7><center><b>$mes2/$ano</b></center></td></tr>";
echo "<tr><td>Domingo</td><td>Segunda</td><td>Terça</td><td>Quarta</td><td>Quinta</td><td>Sexta</td><td>Sábado</td></tr>";
for($linha = 0; $linha < 6; $linha++){
echo "<tr>";
for($coluna = 0; $coluna < 7; $coluna++){
$pos2 = $cont - $pos;
if(empty($dias[$pos2]))echo "<td><center>-</center></td>";
else{
for($z = 0; $z < sizeof($dias_reservas); $z++){
if ($dias[$pos2] == $dias_reservas[$z]) {
echo "<td bgColor='darkgray'><b><center><font color='blue'>".$dias[$pos2]."</font></center></b></td>";
} else {
echo "<td><center>".$dias[$pos2]."</center></td>";
}
}
}//Fim do else
$cont++;
}//Fim do for
echo "</tr>";
}//Fim do for
echo "</table>";
?>
</td>
</tr>
<?
}
?>
Pergunta
lha2
Olá amigos, boa tarde.
Estou tentando desenhar uma lógica para implantar um sistema que visualiza disponibilidade de apartamentos com reservas de locação de temporada, minha tabela tem 4 campos, id, id_apto, data_inicio, data_fim e queria mostrar em um calendário quais dias que os aptos estarão ocupados, porém não consegui nada tentei fazer por consulta SQL via cláusula BETWEEN e nada, alguém poderia me ajudar numa lógica simples, pois pensar é fácil, mas implantar em código está complicado para mim.
Até agora o que consegui é o que está abaixo e agora não apresenta mais nada no calendário, só da - nos dias.
<? if ($dados[tipo] == "Locação Temporária") { ?> <tr> <td style="border-bottom: 1 solid #000000"> <p class="subtitulo">Disponibilidade do imóvel</td> </tr> <tr> <td> <? //Funções function UltimoDia($ano,$mes){ if (((fmod($ano,4)==0) and (fmod($ano,100)!=0)) or (fmod($ano,400)==0)) { $dias_fevereiro = 29; } else { $dias_fevereiro = 28; } switch($mes) { case 01: return 31; break; case 02: return $dias_fevereiro; break; case 03: return 31; break; case 04: return 30; break; case 05: return 31; break; case 06: return 30; break; case 07: return 31; break; case 08: return 31; break; case 09: return 30; break; case 10: return 31; break; case 11: return 30; break; case 12: return 31; break; } } // Fim funções // Variáveis $ano = date("Y"); $cont = 0; $dia = date("d"); $dias = array(); $mes = date("m"); $totalDias = date("t"); $primeiroDia = date("D", mktime(0, 0, 0, $mes, 1, $ano)); $diaprimeiro = "01"; $diafinal = UltimoDia($ano,$mes); $data_inicio = $ano."-".$mes."-".$diaprimeiro; $data_fim = $ano."-".$mes."-".$diafinal; $dias_reservas = array(); // Fim Variáveis for($d = 0; $d < $totalDias; $d++)$dias[$d] = array_push($dias, $d+1); $sql1 = mysql_query("SELECT * FROM reservas WHERE data_inicio BETWEEN '$data_inicio' AND '$data_fim' AND id_imovel = '$imovel'"); while($reserva = mysql_fetch_array($sql1, MYSQL_ASSOC)) { //defino data 1 $ano1 = substr($reserva[data_inicio],0,4); $mes1 = substr($reserva[data_inicio],5,2); $dia1 = substr($reserva[data_inicio],7,2); //defino data 2 $ano2 = substr($reserva[data_fim],0,4); $mes2 = substr($reserva[data_fim],5,2); $dia2 = substr($reserva[data_fim],7,2); //calculo timestamp das duas datas $timestamp1 = mktime(0,0,0,$mes1,$dia1,$ano1); $timestamp2 = mktime(4,12,0,$mes2,$dia2,$ano2); //diminuo a uma data a outra $segundos_diferenca = $timestamp1 - $timestamp2; //converto segundos em dias $dias_diferenca = $segundos_diferenca / (60 * 60 * 24); //obtenho o valor absoluto dos dias (tiro o possível sinal negativo) $dias_diferenca = abs($dias_diferenca); //tiro os decimais aos dias de diferenca $dias_diferenca = floor($dias_diferenca); for($t = 0; $t < $dias_diferenca; $t++)$dias_reservas[$t] = array_push($dias_reservas, $t+1); } print_r($dias_reservas); switch($primeiroDia){ case "Sun": $pos = 0; break; case "Mon": $pos = 1; break; case "Tue": $pos = 2; break; case "Wed": $pos = 3; break; case "Thu": $pos = 4; break; case "Fri": $pos = 5; break; case "Sat": $pos = 6; break; }//Fim do switch switch($mes){ case 1: $mes2 = "Janeiro"; break; case 2: $mes2 = "Fevereiro"; break; case 3: $mes2 = "Março"; break; case 4: $mes2 = "Abril"; break; case 5: $mes2 = "Maio"; break; case 6: $mes2 = "Junho"; break; case 7: $mes2 = "Julho"; break; case 8: $mes2 = "Agosto"; break; case 9: $mes2 = "Setembro"; break; case 10: $mes2 = "Outubro"; break; case 11: $mes2 = "Novembro"; break; case 12: $mes2 = "Dezembro"; break; }//Fim do switch echo "<table align='center' border=1 cellspacing=0 cellpadding=0>"; echo "<tr><td bgColor='cyan' colspan=7><center><b>$mes2/$ano</b></center></td></tr>"; echo "<tr><td>Domingo</td><td>Segunda</td><td>Terça</td><td>Quarta</td><td>Quinta</td><td>Sexta</td><td>Sábado</td></tr>"; for($linha = 0; $linha < 6; $linha++){ echo "<tr>"; for($coluna = 0; $coluna < 7; $coluna++){ $pos2 = $cont - $pos; if(empty($dias[$pos2]))echo "<td><center>-</center></td>"; else{ for($z = 0; $z < sizeof($dias_reservas); $z++){ if ($dias[$pos2] == $dias_reservas[$z]) { echo "<td bgColor='darkgray'><b><center><font color='blue'>".$dias[$pos2]."</font></center></b></td>"; } else { echo "<td><center>".$dias[$pos2]."</center></td>"; } } }//Fim do else $cont++; }//Fim do for echo "</tr>"; }//Fim do for echo "</table>"; ?> </td> </tr> <? } ?>Será que alguém poderia me ajudar?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.