Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Salve galera!
:!: No meu tópico anterior estava com dúvida em como montar uma classe que gere um calendário, mas desisti kkkk
1º) Montei um outro código do zero, que por sinal está só com um erro VISUALIZAR, por exemplo em Fevereiro 2011 acaba no dia 28 e tem uma linha acabixo com 30 e 31...
2º) Gostaria de exibir de 6 em 6 meses. Por exemplo: (Começo do ano 2012)
Janeiro 2012 | Fevereiro 2012 | Março 2012 | Abril 2012 | Maio 2012 | Junho 2012
Agora quando for no meio do ano 2012 ele irá exibir assim:
Julho 2012 | Agosto 2012 | Setembro 2012 | Outubro 2012 | Novembro 2012 | Dezembro 2012
Mas se o mês atual for Outubro 2012 teria como exibir:
Outubro 2012 | Novembro 2012 | Dezembro 2012 | Janeiro 2013 | Fevereiro 2013 | Março 2013
<?php
$ano = date('Y');
for($mes=1; $mes<=12; $mes++){
switch($mes){
case 1: $mes_titulo='Janeiro'; break;
case 2: $mes_titulo='Fevereiro'; break;
case 3: $mes_titulo='Março'; break;
case 4: $mes_titulo='Abril'; break;
case 5: $mes_titulo='Maio'; break;
case 6: $mes_titulo='Junho'; break;
case 7: $mes_titulo='Julho'; break;
case 8: $mes_titulo='Agosto'; break;
case 9: $mes_titulo='Setembro'; break;
case 10: $mes_titulo='Outubro'; break;
case 11: $mes_titulo='Novembro'; break;
case 12: $mes_titulo='Dezembro'; break;
}
// Inteiro do ultimo dia do mês
$ultimo_dia_mes = date("d", mktime(0, 0, 0, $mes+1, 0, $ano));
// Posição do primeiro dias da semana do mês
$posicao_primeiro_dia = date("w", mktime(0, 0, 0, $mes, 1, $ano));
///Total de linhas na tabela
$numtotal = $posicao_primeiro_dia + $ultimo_dia_mes;
$numt = ($numtotal%7 != 0) ? ($numtotal+7-$numtotal%7) : $numtotal;
for($i=0; $i<$numt; $i++){
$dias = $i-$posicao_primeiro_dia+1;
if($i>=$posicao_primeiro_dia && $i<$numtotal){
if($dias==date('d') && $mes==date('m')){
// Dia Atual
$dias = '<font color="#006600">'.$dias.'</font>';
}elseif($i%7 == 0){
// Dias DOMINGO...
$dias = '<font color="#990000">'.$dias.'</font>';
}
$linha[$i] = '<td>'.$dias.'</td>';
}else{
// Espaços vazios depois do último dia do mes
$linha[$i] = '<td> </td>';
}
if($i%7 == 0){
$linha[$i] = '<tr align="center">'.$linha[$i];
}
if($i%7 == 6){
$linha[$i] .= '</tr>';
}
}
echo '<table cellspacing="0" cellpadding="0" class="calendario_tabela" style="float:left; height:194px; margin:5px; width:100px;">
<tr>
<td>
<table>
<tr class="calendario_mes_ano">
<td align="center" colspan="7">'.$mes_titulo.' '.$ano.'</td>
</tr>
<tr class="calendario_semana">
<td align="center">D</td>
<td align="center">S</td>
<td align="center">T</td>
<td align="center">Q</td>
<td align="center">Q</td>
<td align="center">S</td>
<td align="center">S</td>
</tr>';
echo implode(" ",$linha);
if(count($linha)==35){
// Arruma a tabela se for pequena...
echo '<tr><td align="center" colspan="7"> </td></tr>';
}
echo '</table>
</td>
</tr>
</table>';
}
?>Hufersil, muito obrigado pela ajuda e atenção!
Abraço
Hufersil, só fiquei com um dúvida!
Gostaria de selecionar os dias já reservado, adicionei eles em uma array...
CSS
.reserva{
background:#900;
color:#FFF;
}
PHP
$reservados = array('2011-12-15', '2011-12-16', '2011-12-28', '2011-01-21');
Você pode me dar mais uma ajuda...
Valew
Basta:
// para cada dia encontrado no mes
for($j=1; $j<=$maxDias; $j++){
// pega o dia semana
$diaSemana = date('w', mktime(0,0,0,$inicial+$i, $j, $ano));
// data completa
$dataCompleta = date('Y-m-d', mktime(0,0,0,$inicial+$i, $j, $ano));
// classe CSS conforme o dia da semana
switch($diaSemana){
case 0:
$class = 'dom';
break;
case 6:
$class = 'sab';
break;
default:
$class = 'normal';
break;
}
// se estiver em uma reserva
if(in_array($dataCompleta, $reservados)){
$class .= ' reserva';
}
// se for domingo, abre uma nova linha
if($diaSemana == 0){
echo '<tr>';
}
// escreve a celula do dia
echo '<td class="',$class,'">', $j, '</td>';
// se for sabado, fecha a linha
if($diaSemana == 6){
echo '</tr>';
}
}
@braços e fique com Deus!
Agora fecho Hufersil!
Vou estudar este código melhor e ver o que foi feito mais a fundo...
Obrigado pela atenção
Exemplo simples
CSS:
.mes td, .mes th {
PHP
date_default_timezone_set('America/Sao_Paulo');
// nomes dos meses
$meses = explode(',', 'janeiro,fevereiro,marco,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro');
// nomes dos dias da semana
$diasSemana = explode(',', 'dom,seg,ter,qua,qui,sex,sab');
// ano desejado
$ano = 2011;
// mes inicial do ano
$inicial = 10;
// quantidade de meses a ser exibido
$qtd = 6;
// para a quantidade de meses desejados
for($i=0; $i<$qtd; $i++){
// numero de dias do mes
$maxDias = date('d', mktime(0,0,0,$inicial+$i+1, 0, $ano));
// dia da semana inicial
$diaSemana = date('w', mktime(0,0,0,$inicial+$i, 1, $ano));
// numero do mes
$mes = date('m', mktime(0,0,0,$inicial+$i, 1, $ano));
// ano atual conforme calculo
$anoAtual = date('Y', mktime(0,0,0,$inicial+$i, 1, $ano));
// nome do mes atual
$nome = $meses[$mes-1];
// inicia a tabela com o nome do mes
// cabecalho com os nomes dos dias da semana
// se o dia da semana for maior que domingo
// criamos as celulas iniciais para poder iniciar no dia correto
// para cada dia encontrado no mes
// se sobraram dias para fechar a linha
// fecha a tabela
@braços e fique com Deus!