Etiqueta 0 Denunciar post Postado Julho 2, 2012 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. 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
Progjunior Daniel 34 Denunciar post Postado Julho 2, 2012 Cara na verdade voce já está fazendo um filtro só o fato de escolher as datas. O que voce tem que fazer agora e colocar essa opcao no banco de dados. Com certeza o código iria ficar bem menor. Compartilhar este post Link para o post Compartilhar em outros sites
Etiqueta 0 Denunciar post Postado Julho 3, 2012 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
Vinicius Rangel 208 Denunciar post Postado Julho 3, 2012 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
hufersil 145 Denunciar post Postado Julho 3, 2012 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