Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pra montar o calendário, marcar os dias indisponíveis, faço uma consulta SQL, só que fiz uns testes e resultou num probleminha... segue o código.
<?
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;
}
}// Variáveis
if (!isset($ano_form)) {
$ano = date("Y");
$totalDias = UltimoDia($ano,$mes);$ano = $ano_form;
$totalDias = UltimoDia($ano,$mes_form);
}
$cont = 0;
$dia = date("d");
$dias = array();
if (!isset($mes_form)) {
$mes = date("m");
$totalDias = UltimoDia($ano,$mes);$mes = $mes_form;
$totalDias = UltimoDia($ano_form,$mes);
}
$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();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
$datas1 = explode("-",$reserva[data_inicio]);
$ano1 = $datas1[0];
$mes1 = $datas1[1];
$dia1 = $datas1[2];
//defino data 2
$datas2 = explode("-",$reserva[data_fim]);
$ano2 = $datas2[0];
$mes2 = $datas2[1];
$dia2 = $datas2[2];
//calculo timestamp das duas datas
$timestamp1 = mktime(0,0,0,$mes1,$dia1,$ano1);
$timestamp2 = mktime(0,0,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[] = $dia1+$t; }
}
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;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;//Função para buscar dentro do array
function array_search_i($str,$array){
foreach($array as $key => $value) {
if(stristr($str,$value)) return $key;
}
return false;
}
if ($mes == "12") {
$ano_avanca = $ano + 1;
$mes_avanca = "01";
$ano_retrocede = $ano;
$mes_retrocede = $mes - 1;$ano_avanca = $ano;
$mes_avanca = $mes + 1;
$ano_retrocede = $ano - 1;
$mes_retrocede = "12";$ano_avanca = $ano;
$mes_avanca = $mes + 1;
$ano_retrocede = $ano;
$mes_retrocede = $mes - 1;
}
echo "<table align='center' border=1 cellspacing=0 cellpadding=0>";
echo "<tr><td bgColor='cyan' colspan=7><center><small><a href='?imovel=".$imovel."&mes_form=".$mes_retrocede."&ano_form=".$ano_retrocede."'>Retroceder</a> -</small> <b>$mes2/$ano</b> <small>- <a href='?imovel=".$imovel."&mes_form=".$mes_avanca."&ano_form=".$ano_avanca."'>Avançar</a></small></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{
$busca_data = array_search($dias[$pos2],$dias_reservas);
if ($dias_reservas[$busca_data] === $dias[$pos2]) {
echo "<td bgColor='darkgray'><b><center><font color='blue'>".$dias[$pos2]."</font></center></b></td>";echo "<td bgColor='gray'><center>".$dias[$pos2]."</center></td>";
}
}//Fim do else
$cont++;
}//Fim do for
echo "</tr>";echo "</table>";
?>
</td>
</tr>
<?
}
?>
Ok!
O problema é que se a reserva for feita no último dia do mês corrente, no mês seguinte não vai aparecer reservado. Por causa dessa consulta...
$sql1 = mysql_query("SELECT * FROM reservas WHERE data_inicio BETWEEN '$data_inicio' AND '$data_fim' AND id_imovel = '$imovel'");
Como poderia fazer nesse caso?
Outra pergunta, estou montando agora o sistema que vai cadastrar as reservas por imóvel, estou travado na parte onde vai verificar as datas que está ou não reservado o imóvel, tipo, cada reserva possui um data de entrada e de saída, aí para um cadastro de reserva normal ele tem que verificar se no período escolhido não vai estar chocando com uma reserva já feita, como seria basicamente essa lógica (estou apanhando disso)...
Carregando comentários...