Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Eduardo Villa

[Resolvido] Calendário Personalizado

Recommended Posts

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>';
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo simples

 

CSS:

 

.mes {
border: 1px solid #CCCCCC;
float: left;
display: block;
margin-right: 20px;
margin-bottom: 20px;
}

.mes td, .mes th {
font-size: 12px;
color: #000000;
font-family: Arial;
width: 25px;
text-align: center;
}

.dom {
background-color: #CCCCCC;
}

.sab {
background-color: #EFEFEF;
}

 

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
echo '<table class="mes">';
echo '<thead>';
echo '<tr><th colspan="7">',$nome,' ', $anoAtual, '</th></tr>';

// cabecalho com os nomes dos dias da semana
echo '<tr>';
for($j=0; $j<7; $j++){
	echo '<th>', $diasSemana[$j],'</th>';
}
echo '</tr>';
echo '</thead>';


// se o dia da semana for maior que domingo
// criamos as celulas iniciais para poder iniciar no dia correto
if($diaSemana > 0){
	echo '<tr>';
	for($j=0; $j<$diaSemana; $j++){
		echo '<td> </td>';
	}
}

// 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));

	// classe CSS conforme o dia da semana
	switch($diaSemana){
		case 0:
			$class = 'dom';
			break;
		case 6:
			$class = 'sab';
			break;
		default:
			$class = 'normal';
			break;
	}

	// 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>';
	}
}

// se sobraram dias para fechar a linha
if($diaSemana < 6){
	for($j=$diaSemana; $j<6; $j++){
		echo '<td> </td>';
	}
	echo '</tr>';
}

// fecha a tabela
echo '</table>';
}

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta:

  1. Pegar a data completa
  2. Verificar se está dentro dos dias reservados
  3. Adicionar a classe CSS na classe que vai ser colocada no dia

 

// 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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.