Ir para conteúdo

POWERED BY:

Arquivado

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

Etiqueta

Gerar calendário entre data inicial e final

Recommended Posts

Boa tarde,

 

estou a desenvolver um registo de horas de funcionários.

Neste momento tenho 3 inputs para colocar o dia, mes e ano respectivamente para a data inicial e mais 3 para a data final e de seguida é gerada uma tabela com a listagem de dias por linha da tabela.

O que pretendo fazer é limitar o conteúdo da tabela, ou seja, aparecer desde da data inical até à data final, em vez de aparecer o mesmo todo.

 

Não existem registo na Base de dados, ou seja, não pretendo fazer um filtro ou uma pesquisa.

Estou a criar uma tabela em na primeira coluna faz um echo data em cada celula, da data inical até à data final.

 

u0n21l0vx7yb0si6oft_thumb.jpg

 

f46whq5k03obwg1326u9_thumb.jpg

 

aqui fica o código:

<form name="f" action="teste.php">
   	<table>
       	<tr>
           	<td><label>Data de inicio</td>
               <td><input type="text" name="diaInicio" value="1" size="4"/>/	
               <input type="text" name="mesInicio" value="6" size="4" />/
               <input type="text" name="anoInicio" value="2012" size="4"/>
               </label></td>
       	</tr>
           <tr>
           	<td><label>Data de fim</td>
               <td><input type="text" name="diaFinal" value="31" size="4"/>/	
               <input type="text" name="mesFinal" value="6" size="4"/>/
               <input type="text" name="anoFinal" value="2012" size="4"/>
               </label></td>
       	</tr>
           <tr>
           	<td></td>
			<td><input type="submit" id="dados" name="dados_enviar" value="Ver"/></td>
       	</tr>
       </table>
</form>

 

teste.php

<?php 

$DataInicio = $_GET['diaInicio'] ."/". $_GET['mesInicio'] ."/". $_GET['anoInicio'];
$DataFim = $_GET['diaFinal'] ."/". $_GET['mesFinal'] ."/". $_GET['anoFinal'];

$MESES=array("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro");

	function bissexto($ano){
	return ($ano%400==0)||(($ano%4==0)&&($ano%100!=0));}

	function dateToString($d){
		$MM=array("Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez");
		$yyyy=$d.date('Y');
		$mm=$MM[$d.date('m')];//+1
		$dd=$d.getdate();

		if($mm<10) $mm="0"+$mm;
		if ($dd<10) $dd="0"+$dd;

		return $dd+"-"+$mm;
	}//dateToString

	function diaSemanal($d){
		$DDS=array("domingo", "segunda-feira", "terca-terça", "quarta-feira", "quinta-feira", "sexta-feira", "sabado");
		$dd=$d.getdate();
		$dds=$DDS[$d.getdate('d')];

		if ($dd<10) $dd="0"+$dd;

		return $dds;
	}//dateToString



	$IMPOSSIVEL=-1;

	function numeroDiasNoMes($mes, $ano){
		if ($mes==1 || $mes==3 || $mes==5 || $mes==7 || $mes==8 || $mes==10 || $mes==12) return 31;
		else
			if ($mes==4 || $mes==6 || $mes==9 || $mes==11)
				return 30;
			else
				if ($mes==2) return bissexto($ano)? 29:28;
				else return $IMPOSSIVEL;
	}//numeroDiasNoMes


	function gerarCalendarioMensal($ano, $mes){
		$dia=new date($ano, $mes-1, 1); //primeiro dia do mes
		$limite=$numeroDiasNoMes($mes, $ano); //28, 29, 30, 31


		/*document.write("<head>");*/
		/*document.write("<title>N&S Empresa - Registo de Horas</title>");*/
		/*echo "<link rel='icon' type='image/x-icon' href='img/favicon.jpg' /> ";*/
		/*document.write("<link href='css/header.css' rel='stylesheet' type='text/css' />");*/
		/*echo "<link href='css/RegistoHoras.css' rel='stylesheet' type='text/css' />";*/
	/*document.write("</head>");*/

	/*document.write("<body>");*/
		/*echo "<div id='container'>";

		echo "<div id='header'>";
		   echo "<img border='0' src='img/barra_nsemprega.png' alt='' />";
		echo "</div>";

		echo "<div id='cabecalho'>";*/
			echo "<table>";
				echo "<tr>";
					echo "<td>";
						echo "<table>";
							echo "<tr>";
								echo "<td><b>Trabalhador Temporário</b></td>";
							echo "</tr>";
							echo "<tr>";
								echo "<td>Nome:</td>";
								echo "<td>select</td>";
							echo "</tr>";
							echo "<tr>";
								echo "<td>Categoria:</td>";
								echo "<td>select</td>";
							echo "</tr>";
							echo "<tr>";
								echo "<td>Período de Trabalho:</td>";
								echo "<td>DataInicio + DataFim</td>";
							echo "</tr>";

						echo "</table>";
					echo "</td>";

					echo "<td>";
						echo "<table>";
							echo "<tr>";
								echo "<td><b>Empresa Cliente</b></td>";
							echo "</tr>";
							echo "<tr>";
								echo "<td>Ciente:</td>";
								echo "<td>select</td>";
							echo "</tr>";
							echo "<tr>";
								echo "<td>Contribuinte:</td>";
								echo "<td>select</td>";
							echo "</tr>";
							echo "<tr>";
								echo "<td>Ano:</td>";
								echo "<td>select</td>";
							echo "</tr>";

						echo "</table>";
					echo "</td>";
				echo "</tr>";
			echo "</table>";
		echo "</div>";

	echo "<div id='registoH'>";
  	  		echo "<form name='f_criarRegistoH' id='f_criarRegistoH_' method='post' action='' enctype='multipart/form-data'>";
		echo "<table border='1'>";

		echo "<tr align='center'>";
              	  echo "<td style='width: 85px;'><p><b>Data</b></td>";
                 echo "<td style='width: 85px;'><p><b>Dia</b></td>";
                 echo "<td style='width: 85px;'><p><b>Entrada</b></td>";
                 echo "<td style='width: 85px;'><p><b>Saída</b></td>";
                 echo "<td style='width: 85px;'><b>Horas Normais</b></td>";
                 echo "<td style='width: 85px;'><b>Horas Turno</b></td>";
                 echo "<td style='width: 85px;'><b>Feriado / 100%</b></td>";
                 echo "<td style='width: 85px;'><b>Faltas</b></td>";
             echo "</tr>";


		  	require 'conexao.php';

			$sql = mysql_query('SELECT  * FROM linha'); //Data é da tabela Linha - tenho que fazer um INNER JOIN (SELECT funcionario.Id_Funcionario, funcionario.DataInicio, funcionario.DataFim, linha.Id_Linha, linha.Data FROM funcionario INNER JOIN linha ON funcionario.Id_Funcionario = linha.Id_Linha WHERE linha.Data >= '$DataInicio' AND linha.Data <= '$DataFim' ORDER BY linha.Data)

					//SELECT * FROM funcionario WHERE Data >= '$DataInicio' AND Data <= '$DataFim' ORDER Data
					while($rs = mysql_fetch_array($sql)){
						$Data = $rs['Data'];
						$Dia = $rs['Dia'];
						$HEntrada = $rs['HEntrada'];
						$HSaida = $rs['HSaida'];
						$HoraTurno = $rs['HoraTurno'];
						$HoraNormal = $rs['HoraNormal'];
					}

		if((isset($_DataInicio)) < (isset($DataFim))){	

		for ($contador=1; $contador<=$limite; $contador++){
			$fraseParaODia=dateToString($dia);
			$fraseParaSemana=diaSemanal($dia);
			if ($dia.date()==1){
				/*document.write("<h1>"+MESES[dia.getMonth()]+"</h1>");	*/		
			//document.write(fraseParaODia+"<br>");
				echo "<br>";


				echo "<tr  style='text-align: center;'>";
					echo "<td style='width: 104px;'>";
						$fraseParaODia;
						echo "<br>";
					echo "</td>";
					echo "<td style='width: 104px;'>";
						$fraseParaSemana;
						echo "<br>";
					echo "</td>";

					echo "<td style='width: 104px;'><input name='HEntrada' type='text' id='HEntrada' placeholder='Hora de entrada' style='width: 104px;'/></td>";
					echo "<td style='width: 104px;'><input name='HSaida' type='text' id='HSaida' placeholder='Hora de saída' style='width: 104px;'/></td>";
					echo "<td style='width: 104px;'><input name='HoraTurno' type='text' id='HoraTurno' placeholder='Horas de turno' style='width: 104px;'/></td>";
					echo "<td style='width: 104px;'><input name='HoraNormal' type='text' id='HoraNormal' placeholder='Horas normais' style='width: 104px;'/></td>";
					echo "<td style='width: 104px;'><input name='NumHorasFeriado' type='text' id='NumHorasFeriado' placeholder='Horas do feriado' style='width: 104px;'/></td>";
					echo "<td style='width: 104px;'><input name='NumHorasFalta' type='text' id='NumHorasFalta' placeholder='Horas de faltas' style='width: 104px;'/></td>";

				echo "</tr>";

			$dia->setDate($dia.getdate()+1);
			}
		}//for
		}
		echo "</table>";


		echo "<br>";

		echo "<table>";
		echo "<tr>";
                echo "<td class='campos'>Prémio Produtividade:";
                   echo "</td>";
                   echo "<td>";
                      echo "<input name='PremioP' type='text' id='PremioP' placeholder='Digite o valor'/>€";
                   echo "</td>";
               echo "</tr>";
		echo "</table>";

		echo "</form>";

           echo "<input type='submit' name='buttonRegistoHoras' id='buttonRegistoHoras' value='Guardar' />";

		echo "</div>";


		echo "<div id='informacao'>";
			echo "<p><b>Assinatura do Trabalhador Temporário:</b></p>";
			echo "<p><hr style='width: 500px'></p>";
			echo "<p>O abaixo-assinado como representante do cliente acima identificado, declara que o total de horas prestadas pelo trabalhador descritas nesta folha de prestações, está exacta e foi respeitado o disposto na Lei sobre as horas extraordinárias.</p>";
			echo "<br>";
			echo "<p><b>Assinatura do representante e carimbo:</b></p>";
			echo "<p><hr style='width: 500px'></p>";
			echo "<br>";
       	echo "</div>";




		echo "<div id='rodape'>";
			echo "<center>";
			echo "<p>Sede: Rua João Freitas Branco, 28 B - Benfica - 1500-359 Lisboa</p>";
			echo "<p>Contribuinte nº 508 476 720 - Alvará nº. 612/208</p>";
			echo "<p>Tel: 217 223 037 / 915 228 544         e-mail: info@nstrabalhotemporario.com</p>";
			echo "</center>";
       	echo "</div>";

	echo "<form name='f_imprimir' action='Imprimir.php'>";
		echo "<input type='submit' name='buttonRHImprimir' id='buttonRHImprimir' value='Imprimir' />";
	echo "</form>";

	echo "</div>";
	/*document.write("</body>");*/
	}//gerarCalendarioMensal
?>

 

podem dar-me uma ajudinha?

 

desde já, muito obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu não quero fazer um filtro.

 

quero escolher uma data inicial e outra final e gerar um calendário.

 

exemplo: DataInicio=10/06/2012 DataFim= 20/06/2012

 

Resultado:

10/06/2012

11/06/2012

12/06/2012

13/06/2012

14/06/2012

15/06/2012

16/06/2012

17/06/2012

18/06/2012

19/06/2012

20/06/2012

 

podem ajudar-me?

 

a data não está guardada na base de dados. só depois de gerar essas datas da data inicial até à final, é que vou guardar cada linha na base de dados

 

como tenho o código actualmente:

 

<form name="f1" action="RegistaHoras.php">
    <table>
        <tr>
            <td><label>Data de inicio</td>
               <td><input type="text" name="diaInicio" value="1" size="4"/>/
               <input type="text" name="mesInicio" value="6" size="4" />/
               <input type="text" name="anoInicio" value="2012" size="4"/>
               </label></td>
        </tr>
           <tr>
            <td><label>Data de fim</td>
               <td><input type="text" name="diaFinal" value="31" size="4"/>/
               <input type="text" name="mesFinal" value="6" size="4"/>/
               <input type="text" name="anoFinal" value="2012" size="4"/>
               </label></td>
        </tr>
           <tr>
            <td></td>
   <td><input type="submit" id="dados" name="dados_enviar" value="Registar"/></td>
        </tr>
       </table>
</form>

 

 

RegistaHoras.php

<?php

function bissexto($ano)
{
   return ($ano % 400 == 0) || (($ano % 4 == 0) && ($ano % 100 != 0));
}
function dateToString($d)
{
   $MM   = array(
       "Jan",
       "Fev",
       "Mar",
       "Abr",
       "Mai",
       "Jun",
       "Jul",
       "Ago",
       "Set",
       "Out",
       "Nov",
       "Dez"
   );
   $yyyy = strip_tags(trim($_GET['anoInicio']));
   $mm   = $MM[strip_tags(trim($_GET['mesInicio']))]; //+1
   $dd   = date($d); //$d.date();

   if ($mm < 10)
       $mm = "0" + $mm;
   if ($dd < 10)
       $dd = "0" + $dd;

   return $dd + "-" + $mm;
} //dateToString
function mesToString($mes)
{
   $MM = array(
       "Jan",
       "Fev",
       "Mar",
       "Abr",
       "Mai",
       "Jun",
       "Jul",
       "Ago",
       "Set",
       "Out",
       "Nov",
       "Dez"
   );
   return $MM[$mes - 1];
}
function diaSemanal($date)
{
   $dds = array(
       "domingo",
       "segunda-feira",
       "terca-terça",
       "quarta-feira",
       "quinta-feira",
       "sexta-feira",
       "sabado"
   );
   $dd  = date('w', strtotime($date));
   return $dds[$dd];
} //dateToString

$IMPOSSIVEL = -1;
function numeroDiasNoMes($mes, $ano)
{
   if ($mes == 1 || $mes == 3 || $mes == 5 || $mes == 7 || $mes == 8 || $mes == 10 || $mes == 12)
       return 31;
   else if ($mes == 4 || $mes == 6 || $mes == 9 || $mes == 11)
       return 30;
   else if ($mes == 2)
       return bissexto(ano) ? 29 : 28;
   else
       return $IMPOSSIVEL;
} //numeroDiasNoMes

function gerarCalendarioMensal($ano, $mes)
{
   $dia    = 1; //date($ano, $mes-1, 1); //primeiro dia do mes
   $limite = numeroDiasNoMes($mes, $ano); //28, 29, 30, 31



   echo "<div id='registoH'>";
   echo "<form name='f_criarRegistoH' id='f_criarRegistoH_' method='post' action='' enctype='multipart/form-data'>";
   echo "<table border='1'>";

   echo "<tr align='center'>";
   echo "<td style='width: 85px;'><p><b>Data</b></td>";
   echo "<td style='width: 85px;'><p><b>Dia</b></td>";
   echo "<td style='width: 85px;'><p><b>Entrada</b></td>";
   echo "<td style='width: 85px;'><p><b>Saída</b></td>";
   echo "<td style='width: 85px;'><b>Horas Normais</b></td>";
   echo "<td style='width: 85px;'><b>Horas Turno</b></td>";
   echo "<td style='width: 85px;'><b>Feriado / 100%</b></td>";
   echo "<td style='width: 85px;'><b>Faltas</b></td>";
   echo "</tr>";


   require 'conexao.php';


   for ($contador = $_GET['diaInicio']; $contador <= $limite; $contador++) { //$_GET['diaFinal']

       $currentData = $_GET['anoInicio'] . '-' . $_GET['mesInicio'] . '-' . $contador;

       $mes = mesToString($_GET['mesInicio']);

       $fraseParaODia = diaSemanal($currentData);
       ;


       echo "<tr  style='text-align: center;'>";
       echo "<td style='width: 104px;'>";
       echo $contador + '-' + $mes;
       echo "</td>";
       echo "<td style='width: 104px;'>";
       echo $fraseParaODia;
       echo "</td>";

       echo "<td style='width: 104px;'><input name='HEntrada$contador' type='text' id='HEntrada' placeholder='Hora de entrada' style='width: 104px;'/></td>";
       echo "<td style='width: 104px;'><input name='HSaida$contador' type='text' id='HSaida' placeholder='Hora de saída' style='width: 104px;'/></td>";
       echo "<td style='width: 104px;'><input name='HoraTurno$contador' type='text' id='HoraTurno' placeholder='Horas de turno' style='width: 104px;'/></td>";
       echo "<td style='width: 104px;'><input name='HoraNormal$contador' type='text' id='HoraNormal' placeholder='Horas normais' style='width: 104px;'/></td>";
       echo "<td style='width: 104px;'><input name='NumHorasFeriado$contador' type='text' id='NumHorasFeriado' placeholder='Horas do feriado' style='width: 104px;'/></td>";
       echo "<td style='width: 104px;'><input name='NumHorasFalta$contador' type='text' id='NumHorasFalta' placeholder='Horas de faltas' style='width: 104px;'/></td>";

       echo "</tr>";
   }
   echo "</table>";


   echo "<br>";


   echo "</form>";

   echo "<input type='submit' name='buttonRegistoHoras' id='buttonRegistoHoras' value='Guardar' />";

   echo "</div>";

}
gerarCalendarioMensal($_GET['anoInicio'], $_GET['mesInicio'], $_GET['diaInicio']);
?>

 

já gera o calendário a partir do dia inicial. Falta limitar por data final.

O que pode acontecer é colocar-se uma data inicial, 10-06-2012 até à data final 09-07-2012, o que implica ter a listagem do calendário com mais um mês (parte do mês).

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara tem uma função que fiz aqui e ela pode te ajudar.

 

public function calcularDatas($data1, $data2 = ''){	
$data2 = (!empty($data2)) ? $data2 : date('Y-m-d');
       $timestamp1 = strtotime($data1);
       $timestamp2 = strtotime($data2);
       $datas = array();
       while ( $timestamp1 <= $timestamp2 ){
          $datas[] = date( 'd/m', $timestamp1 );
          $timestamp1 += 86400;
}
$ret['datas'] = $datas;
$ret['total'] = count($ret['datas']);
return $ret;			
}

 

é bem simples, você insere a primeira data no formato ANO-MES-DIA só para assegurar.

 

o primeiro parametro é obrigatório, o segundo se não for preenchido receberá o valor refente a data de hoje.

 

retorna um array com todos os dias desde o dia_inicial ao dia_fim e retorna tbm a quantidade de datas

Compartilhar este post


Link para o post
Compartilhar em outros sites

PHP 5.3

 


$inicio = '10/06/2012'; // valores podem vir do formulario
$fim    = '20/06/2012';

$dataInicial = DateTime::createFromFormat('d/m/Y', $inicio);
$dataFinal   = DateTime::createFromFormat('d/m/Y', $fim);

while($dataInicial <= $dataFinal){

// faz o que tem que fazer
// depois adiciona um dia
$dataInicial->add(new DateInterval('P1D'));
}

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.