[codebox]<html>
<body>
<?php
$host = "localhost";
$usuario = "leonardo";
$senha = "123";
$base = "faturamento";
$tabela = "busca";
$conexao = mysql_connect($host, $usuario, $senha);
if (!$conexao) {
die ("Erro de conexão com localhost, o seguinte erro ocorreu -> ".mysql_error());
}
$banco = mysql_select_db($base,$conexao);
if (!$banco) {
die ("Erro de conexão com banco de dados, o seguinte erro ocorreu -> ".mysql_error());
}
// $dt1 = '2009-07-22 06:27:00';
// $dt2 = '2009-07-23 05:30:00';
//transformando data pra pt-br ex: 23/07/2009
$data = $_POST['data']
$data_bkp = explode(' ',$data);
$data_bkp2 = explode('-',$data_bkp[0]);
$nova_data = $data_bkp2[2].'/'.$data_bkp2[1].'/'.$data_bkp2[0]. ' '.$data_bkp[1];
//variaveis de abertura e fechamento
$dt1 = $_POST["entrada"];
$dt2 = $_POST["saida"];
$unix_data1 = strtotime($dt1);
$unix_data2 = strtotime($dt2);
$nHoras = ($unix_data2 - $unix_data1) / 3600;
$nMinutos = (($unix_data2 - $unix_data1) % 3600) / 60;
// printf('%02d:%02d', $nHoras, $nMinutos);
$total = sprintf('%02d:%02d:00', $nHoras , $nMinutos);
// echo " $total ";
$hora = "SELECT * FROM registros WHERE crm BETWEEN $dt1 AND $dt2 ORDER BY crm " or die (mysql_error()); //
// $hora = "select TIMEDIFF(’2009-07-25 10:00:00', ‘2009-07-25 17:00:00')" or die (mysql_error()); //
$time = mysql_query($hora);
$first_time= @mysql_fetch_object($time);
echo mysql_error();
?>
<table width="54%" border="1">
<tr>
<td width="70%">CRM - Nome do Medico</td>
<td width="50%">Abertura</td>
<td width="50%">Fechamento</td>
<td width="34%">Total</td>
</tr>
<tr>
<td>
<?php
$_POST["crm"];
$_POST["nomemedico"];
echo "$crm / $nomemedico";
?>
</td>
<td>
<?php
$first_time->hora_abertura;
?>
</td>
<td>
<?php
$first_time->hora_fecha;
?>
</td>
<td>
<?php
$dife=(($first_time->hora_abertura)-($first_time->hora_fecha));
?>
</td>
</tr>
</table>
</body>
</html>[/codebox]
> A ideia é cadastrar crm e medicos... e em cima disso cadastrar a entrada e saida (data / hora) deles do plantão
> existem tres valores de plantão.. uti = R$ 50,00 normal = R$ 20,00 feriado = R$ 25,00 a hora!
> na pagina de cadastro eu criei uma combo do tipo de plantão pra selecionar e no banco de dados coloquei os valores
> quero buscar data e horas cadastradas por data inicial e data final (ex: 15/06/2009 até 15/07/2009) fazer aparecer a data e hora de entrada e tirar a diferença de cada valores cadastrados
ex:
entrada saida total
02/06/2009 17:00:00 - 03/06/2009 06:30:00 - 13:30 * 50 = 665,00
...
...
...
somar horas que trabalhou e total a receber ...
total geral: de horas que trabalhou e total a receber :}
se alguem poder me ajudar nisso eu ficaria muito grato mesmo!
>
>

Calcular Diferença De Data/horas
Started By xYs, 30/10/2009, 11:18
2 replies to this topic
#1
Posted 30/10/2009, 11:18
#2
Posted 30/10/2009, 18:47
xYs,
Pesquisando sobre mktime, encontrei uma função muito legal pra achar diferenças. Fiz umas adaptações pro meu jeito, vou começar a utilizar nos meus scripts. Acredito que vai te servir, veja só:
Em algum lugar do seu script vc terá as datas Inicial e Final, certo?
Vamos esmiuçar cada item e ajeitar pra função que vem por aí:
Agora a função e a sua chamada:
Agora a visualização das diferenças:
O bom desta função, ainda mais pro teu caso, é que vc pode calcular não só as horas, mas todos os campos da data.
Abraços, T+
Pesquisando sobre mktime, encontrei uma função muito legal pra achar diferenças. Fiz umas adaptações pro meu jeito, vou começar a utilizar nos meus scripts. Acredito que vai te servir, veja só:
Em algum lugar do seu script vc terá as datas Inicial e Final, certo?
$dt_ini = '2009-07-22 06:27:00'; $dt_fin = '2009-07-23 05:30:00';
Vamos esmiuçar cada item e ajeitar pra função que vem por aí:
$dia_ini = substr($dt_ini,8,2); $mes_ini = substr($dt_ini,5,2); $ano_ini = substr($dt_ini,0,4); $hor_ini = substr($dt_ini,11,2); $min_ini = substr($dt_ini,14,2); $seg_ini = substr($dt_ini,17,2); $dia_fin = substr($dt_fin,8,2); $mes_fin = substr($dt_fin,5,2); $ano_fin = substr($dt_fin,0,4); $hor_fin = substr($dt_fin,11,2); $min_fin = substr($dt_fin,14,2); $seg_fin = substr($dt_fin,17,2); $dt_ini_format = mktime($hor_ini,$min_ini,$seg_ini,$mes_ini,$dia_ini,$ano_ini); $dt_fin_format = mktime($hor_fin,$min_fin,$seg_fin,$mes_fin,$dia_fin,$ano_fin);
Agora a função e a sua chamada:
function date_diff($d1, $d2){ /* compares two timestamps and returns array with differencies (year, month, day, hour, minute, second) */ //check higher timestamp and switch if neccessary if ($d1 < $d2){ $temp = $d2; $d2 = $d1; $d1 = $temp; } else { $temp = $d1; //temp can be used for day count if required } $d1 = date_parse(date("Y-m-d H:i:s",$d1)); $d2 = date_parse(date("Y-m-d H:i:s",$d2)); //seconds if ($d1['second'] >= $d2['second']){ $diff['second'] = $d1['second'] - $d2['second']; } else { $d1['minute']--; $diff['second'] = 60-$d2['second']+$d1['second']; } //minutes if ($d1['minute'] >= $d2['minute']){ $diff['minute'] = $d1['minute'] - $d2['minute']; } else { $d1['hour']--; $diff['minute'] = 60-$d2['minute']+$d1['minute']; } //hours if ($d1['hour'] >= $d2['hour']){ $diff['hour'] = $d1['hour'] - $d2['hour']; } else { $d1['day']--; $diff['hour'] = 24-$d2['hour']+$d1['hour']; } //days if ($d1['day'] >= $d2['day']){ $diff['day'] = $d1['day'] - $d2['day']; } else { $d1['month']--; $diff['day'] = date("t",$temp)-$d2['day']+$d1['day']; } //months if ($d1['month'] >= $d2['month']){ $diff['month'] = $d1['month'] - $d2['month']; } else { $d1['year']--; $diff['month'] = 12-$d2['month']+$d1['month']; } //years $diff['year'] = $d1['year'] - $d2['year']; return $diff; } $array_com_as_diferencas = date_diff($dt_ini_format, $dt_fin_format);
Agora a visualização das diferenças:
$dia = $array_com_as_diferencas['day']; $mes = $array_com_as_diferencas['month']; $ano = $array_com_as_diferencas['year']; $hor = $array_com_as_diferencas['hour']; $min = $array_com_as_diferencas['minute']; $seg = $array_com_as_diferencas['second']; echo "<br>A diferença entre as datas é de: $ano ano(s), $mes mês(meses), $dia dia(s), $hor hora(s), $min minuto(s) e $seg segundo(s)";
O bom desta função, ainda mais pro teu caso, é que vc pode calcular não só as horas, mas todos os campos da data.
Abraços, T+
Não sou expert... mas tento ajudar! Mas o que mais preciso é de ajuda! hehehe
#3
Posted 31/10/2009, 16:19
Dê uma olhada: DateTime::diff()O bom desta função, ainda mais pro teu caso, é que vc pode calcular não só as horas, mas todos os campos da data.

O único problema é que o PHP 5.3.0 foi lançado há 4 meses e, portanto, não é encontrado em qualquer lugar - ainda mais porque nele muita coisa mudou. Mas já é bom ir conhecendo.

[]sAté mais
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)