Jump to content


Photo

Calcular Diferença De Data/horas


  • Faça o login para participar
2 replies to this topic

#1 xYs

xYs

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Não informado

Posted 30/10/2009, 11:18

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

>
>

#2 jfsmi

jfsmi

    12 Horas

  • Usuários
  • 201 posts
  • Sexo:Masculino

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?
$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 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 31/10/2009, 16:19

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.

Dê uma olhada: DateTime::diff() :)

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)

IPB Skin By Virteq