Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Contando Dias


Mussi Corporation

Pergunta

Bom Dia srs....

Eu estou desenvolvendo um sistema de agendamentos... Mas não consegui pensar e nem desenvolver um cógido que conte quando dias vai ter o agendamento. Por exemplo:

Inicio = 23/02/2009

Término = 04/03/2009

Foram 11 dias, correto?Gostaria de saber se alguém pode me ajudar a pensar em algum jeito de criar um código PHP para que conte automaticamente.

Ps.: Consegui criar para o mesmo mês. o problema é quando inverte de mês.

Aguardo alguma ajuda...

MUITO GRATO!!!

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

<? 

$data = dia/mes/ano;
$prazo = 2; (meses)

function Calcula($prazo, $dataini) {
  
     list($dia,$mes,$ano) = explode("/",$dataini);
    
     if($dia>01) $dia--;    
     
    for($i=1; $i <= $prazo; $i++){
      if ($mes ==12){
        $mes= 1;
        $ano++;
      }else{
        $mes++;
      }
    }
    
    if ($mes < 10) $mes= "0".$mes;
    if ($dia > 01 && $dia < 10) $dia= "0".$dia;

   return $result = $dia."/".$mes."/".$ano;
}
?>

espero que tenha te ajudado.

se não resolver seu problema a logica em si do problema q vira o dia e não vira o mes vai ajuda bastante.

o que acontece encima..

ele te retorna 2 meses depois da data de inicio..

tem outro jeito mais simples claro.

mais se isso não resolver seu problema da um toke. e explica certinho como funciona esse agendamento..

se tem data padrão. se e o cara q escolhe qnts dias depois da data inicio.

dai a gente da um jeito.

;D

abracos espero ter ajudado!.

att

Link para o comentário
Compartilhar em outros sites

  • 0

Entendeu seu código.... mais acho que não conseguiria usar para o que preciso...

Então, muito obrigado pela ajuda... vou tentar explicar en detalhes... rs...

Vamos lá...

É uma pousada, onde há o período que o cliente hospeda...

O Valor da diária, por exemplo é de 69,90. O cliente ficou do dia 29/10/2009 e saio dia 4/11/2009. Então, gostaria que o sistema me desse o valor que o cliente deverá pagar pelo número de dias hospedados...

Que seria 7 dia = 489,3 reais

Meu problema é quando acontece que nem neste caso, tem a virado do mês... eu fiquei perdido sem saber o que fazer... pois quando é o mesmo mês, eu pego os valores e diminuo, e da tudo certo.. mais quant tem a virada do mes, eu realmente não sei o qeu fazer...

Acho que expliquei legal agora....

aguardo uma resposta...

MUITO GRATO...

Link para o comentário
Compartilhar em outros sites

  • 0

Claro

Seguinte primeiro você tem que verificar como esta seu campo data, neste caso especifico ele tem que estar com datetime no banco certo.

seguinte tenho duas datas no meu banco data_abertura(tipo datetime) e data_fecha(tb tipo datetime) este tipo é padrão americano (2009-05-12 11:55:00) certo até sem problema pra você

Agora como eu uso o strtotime segue o código abaixo.

Neste código faço a seleção das datas que me será necessário

$SQLQuery= "SELECT * FROM chamados WHERE codigo = " . $_GET["id"] OR DIE (mysql_error());
                 $Row=mysql_query($SQLQuery);
                 $Array = mysql_fetch_array($Row);
                 $dt1=$Array["data_abertura"];
                 $dt2=$Array["data_fecha"];
Aqui as transformo em "numero" para efetuar a diferença entre as datas
$dt_inicio = (strtotime($dt1));
$dt_final = (strtotime($dt2));
Aqui efetuo a diferença
$dt_total = ($dt_final-$dt_inicio);
e tenho um campo no meu banco um campo inteiro chamado tempo médio e neste campo eu atualizo conforme código abaixo
$sql_query = "UPDATE chamados SET tempo_medio = '$dt_total' WHERE codigo = " . $_GET["id"] OR DIE (mysql_error());
                 
mysql_query($sql_query);
Com isso eu tenho um valor numérico no tempo médio certo o que eu faço agora na hora de exibir o tempo que eu gasto para verificar meu chamado eu faço a seguinte exibição preciso do código do Carlos H. Reche que vai interpretar o campo tempo_medio
define('dias_por_mes', ((((365*3)+366)/4)/12) );
function converte_segundos($total_segundos, $inicio = 'Y') {
/**
* @autor: Carlos H. Reche
* @data: 11/08/2004
*/

/* Devido àariaç de dias entre os meses (pode ter 28, 29, 30 ou 31), o cáulo com diferenç entre timestamps nunca poderáer exato, a nãser que o cáulo comece pelo nú de dias (ou horas, minutos, segundos). Para minimizar ao mámo essa diferenç eu criei esta constante para utilizar durante o cáulo:
*/
define('dias_por_mes', ((((365*3)+366)/4)/12) );

$comecou = false;

if ($inicio == 'Y')
{
$array['anos'] = floor( $total_segundos / (60*60*24* dias_por_mes *12) );
$total_segundos = ($total_segundos % (60*60*24* dias_por_mes *12));
$comecou = true;
}
if (($inicio == 'm') || ($comecou == true))
{
$array['meses'] = floor( $total_segundos / (60*60*24* dias_por_mes ) );
$total_segundos = ($total_segundos % (60*60*24* dias_por_mes ));
$comecou = true;
}
if (($inicio == 'd') || ($comecou == true))
{
$array['dias'] = floor( $total_segundos / (60*60*24) );
$total_segundos = ($total_segundos % (60*60*24));
$comecou = true;
}
if (($inicio == 'H') || ($comecou == true))
{
$array['horas'] = floor( $total_segundos / (60*60) );
$total_segundos = ($total_segundos % (60*60));
$comecou = true;
}
if (($inicio == 'i') || ($comecou == true))
{
$array['minutos'] = floor($total_segundos / 60);
$total_segundos = ($total_segundos % 60);
$comecou = true;
}
$array['segundos'] = $total_segundos;

return $array;
}
e depois eu utilizo esta função dentro do meu while conforme código Atenção analise bem o que a função faz para você não ficar perdido ok.
while ($oRow = @mysql_fetch_array($oUsers)) {
   $tempo_medio = ($oRow["tempo_medio"]); // busca o campo tempo médio
   $total_segundos = $tempo_medio; // esta variavel recebe o valo do tempo médio  
   $array = converte_segundos($total_segundos, 'd'); // aqui a função converte para dias
Aqui eu exibo o tempo gasto
<td>
     <center>
       <font color="<?php print $cor_dados; ?>"><?php  echo $array['dias']. "&nbsp;dias&nbsp;&nbsp;"  .   $array['horas']  .  "&nbsp;Horas&nbsp;&nbsp;". $array['minutos']."&nbsp;Minutos&nbsp;"; ?></font>
     </center>    </td>

Espero ter te ajudado.

Att.

AXR36

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...