
lha2
Membros-
Total de itens
7 -
Registro em
-
Última visita
Sobre lha2

lha2's Achievements
0
Reputação
-
Amigão, vou te perturbar de novo... Olha só, 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; } } // Fim funções // Variáveis if (!isset($ano_form)) { $ano = date("Y"); $totalDias = UltimoDia($ano,$mes); } else { $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); } else { $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(); // 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 $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; }//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 //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; } elseif ($mes == "01") { $ano_avanca = $ano; $mes_avanca = $mes + 1; $ano_retrocede = $ano - 1; $mes_retrocede = "12"; } else { $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>"; } else { echo "<td bgColor='gray'><center>".$dias[$pos2]."</center></td>"; } }//Fim do else $cont++; }//Fim do for echo "</tr>"; }//Fim do for 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)... Grato.
-
Amigo, procurei e tentei tudo o que pude, até colocar foreach, porém fez loop e detonou o formato do calendário. Me dá mais uma luz aí... Consegui!!!!!!!!!! Valeu amigão, fiz uma última tentativa e consegui! Valeu mesmo...
-
Amigão, como poderia fazer isso?
-
Amigo, obrigado, com esse: $dias_reservas[] = $dia1+$t; Deu certinho, porém o que ocorre agora? É que o primeiro elemento do array $dias_reservas não é encontrado: 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{ $busca_data = array_search($dias[$pos2],$dias_reservas); if ($busca_data) { 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 Então ele monta o calendário com o primeiro dia de reservas sem marcar a data. Há algo que posso fazer?
-
Bom, eu expliquei e defini mal o que queria perguntar, o código em dúvida é este: for($t = 0; $t <= $dias_diferenca; $t++) { $dias_reservas[$t] = array_push($dias_reservas, $dia1+$t); } Ele está dentro do while que retorna todas as reservas listadas dentro de um período, então, a cada reserva encontrada ele verifica o período da reserva e lança os dias individualmente no array $dias_reservas, só que o resultado sai desordenado... conforme mostrei acima... Populei uma base de testes com datas de reservas fictícias para fazer o teste e sai tudo errado.
-
Olá novamente, estou desenvolvendo uma aplicação de reservas com calendário de disponibilidade, estou com uma dúvida num FOR, segue o código...: // 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 $datas1 = explode("-",$reserva[data_inicio]); $ano1 = $datas1[0]; $mes1 = $datas1[1]; $dia1 = $datas1[2]; echo $datas1[0]."<br>".$datas1[1]."<br>".$datas1[2]."<br>"; //defino data 2 $datas2 = explode("-",$reserva[data_fim]); $ano2 = $datas2[0]; $mes2 = $datas2[1]; $dia2 = $datas2[2]; echo $datas2[0]."<br>".$datas2[1]."<br>".$datas2[2]."<br>"; //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); echo $dias_diferenca."<br>"; //O RESULTADO DESTE FOR É DUVIDOSO... RSRSRS SOBRE ELE ESTOU COM DÚVIDA for($t = 0; $t <= $dias_diferenca; $t++) { $dias_reservas[$t] = array_push($dias_reservas, $dia1+$t); } } O resultado do for acima é: Array ( [0] => 7 [1] => 8 [2] => 9 [3] => 4 [4] => 9 [5] => 10 [6] => 12 [7] => 13 [8] => 14 ) Está desordenado e com datas que não estão no banco, alguém poderia me ajudar?
-
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?