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>
<?
}
?>
Question
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.
Será que alguém poderia me ajudar?
Link to comment
Share on other sites
1 answer to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.