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

Subtração de Datas


marcosfj1

Pergunta

Galera to com o seguinte problema, pediram pra quem fizesse assim

Aqui quando o cliente faz um pedido e gravado no banco num tabela de pedidos a data que o pedido foi feito, então meu chefe quer saber quem são os que não compram nada a mais de 6 meses, ai pensei em pegar este valor e inserir em uma tabela diferente, pois estes que forem selecionados devem ser desativados, e não poderao mais comprar.

Mas não sei fazer a subtraçao das datas teria que ser algo do tipo

if(DATA ATUAL - dt_pedido >= 6 meses)

INSERT INTO cliente_bloqueados

Mas não sei como poderia fazer esta subtração?

alguém poderia me ajudar

Valeu

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Facim :) faz a o script abaixo

<?php
$dataatual         = strtotime(date("d.m.Y")); // formato data.mes.ano
$datapedido      = strtotime(date("20.12.2010")); // mesmo formato


$diferencia = ($dataatual - $datapedido) / 86400;


echo $diferencia;

?>

Editado por Jefferson Oliveira
Link para o comentário
Compartilhar em outros sites

  • 0
Facim :) faz a o script abaixo

<?php
$dataatual         = strtotime(date("d.m.Y")); // formato data.mes.ano
$datapedido      = strtotime(date("20.12.2010")); // mesmo formato


$diferencia = ($dataatual - $datapedido) / 86400;


echo $diferencia;

?>
Valeu cara testei seu codigo aqui, e era exatamente isso que eu queria, mas me explica duas coisas no meu caso, q vou pegar a data do pedido do banco ficaria assim:
$sql="SELECT P.dt_pedido FROM pedido P WHERE dt_pedido IS NOT NULL";
$req = mysql_query($sql) or die(mysql_error());
$cp = mysql_fetch_array($req) 

$dataatual         = strtotime(date("Y.m.d")); // [b]no banco esta dessa forma[/b]
$datapedido      = strtotime(date("cp['dt_pedido']")); // [b]aqui eu jogava o valor obtido do banco?????????[/b]

$diferencia = ($dataatual - $datapedido) / 86400; // [b]Este numero como voce conseguiu ele???  porque agora fiquei sabendo q tem que ser 4 meses e não 6[/b]

Valeu pela ajuda

Link para o comentário
Compartilhar em outros sites

  • 0

strtotime()

A função espera que seja dado uma string contendo um formato de data em inglês US e tentará analisar esse formato dentro de um timestamp Unix (o número de segundos desde January 1 1970 00:00:00 GMT), relativo ao timestamp dado em now, ou a hora atual se now não é fornecido.

Dai o 86400 é para transforma de segundo pra dia .(já q afunção transforma em segundos.)

4 meses igual a 4 x 30dias (na maioria dos casos).

Você ira verificar se a variavel $diferencia é maior que 120 se for passou de 4 meses.Se você quiser uma diferença mais exata,é so falar que eu posso bola uma função aqui.

Link para o comentário
Compartilhar em outros sites

  • 0

Essa funçao acho que da conta do recado.

Onde: $datape é a data do pedido...

<?
function meses($datape){
         $datap = explode('/',$datape);
         $diap = $datap[0];
         $mesp = $datap[1];
         $anop = $datap[2];

         $data_atual = date('d/m/Y');
         $datah = explode('/',$data_atual);
         $diah = $datah[0];
         $mesh = $datah[1];
         $anoh = $datah[2];
         
         $meses = $mesh - $mesp;
         $dias = $diah - $diap;
         $anos = $anoh - $anop;
         if($anos < 0){
          echo "Pedido ainda sera feito!!";
          exit;
         }
         if($anos > 0){
          $meses = ($anos * 12) + $meses;
         }
         if($diah < $diap){
          $meses--;
         }
         return $meses;
}
?>

Ela usa no formato brasileiro, se quiser no modo do banco de dados é so muda os explodes e muda a ordem dos arrays.

Editado por david.lyonnais
Link para o comentário
Compartilhar em outros sites

  • 0

Colega david.lyonnais

Teste aqui sua funcao e nad aconteceu, não retornou nada.....não apareceu nada na tela

A função q mais de certo foi a do Jefferson Oliveira

Mas não consigo passar o valor do banco pra ela

$sql="SELECT P.dt_pedido FROM pedido P WHERE dt_pedido IS NOT NULL";
$req = mysql_query($sql) or die(mysql_error());
$cp = mysql_fetch_array($req) 

$dataatual         = strtotime(date("Y.m.d")); // no banco esta dessa forma
$datapedido      = strtotime(date("cp['dt_pedido']")); // aqui eu jogava o valor obtido do banco?????????

$diferencia = ($dataatual - $datapedido) / 86400; //

Link para o comentário
Compartilhar em outros sites

  • 0

Ae galera consegui, adaptei a funcao do Periscuelo, e deu certo

fiz da seguite forma:

$sql="SELECT P.dt_pedido, P.id_pedido, P.id_cliente, C.id_cliente, IFNULL(C.nome, C.razao_social) AS nome 
        FROM tabela P 
        INNER JOIN tabela C ON C.id_cliente = P.id_cliente
        WHERE dt_pedido IS NOT NULL
        AND C.st_ativo = 1
        GROUP BY P.id_cliente
        ORDER BY P.id_pedido DESC
        ";
$req = mysql_query($sql) or die(mysql_error());
while($cp = mysql_fetch_array($req)){;

$dataMaior = date("Y/m/d");
$dataMenor = $cp['dt_pedido'];

echo diffDays($dataMaior,$dataMenor,'months').' mes(es)<br /><br />'; //diferença em meses
echo $cp['dt_pedido'].' <br />';
echo $cp['id_pedido'].' <br />';
echo $cp['nome'].' / '.$cp['id_cliente'].' <br /><hr>';

$meses = diffDays($dataMaior,$dataMenor,'months');



    if($meses > 4){
        echo "<b>Cliente será bloqueado<br></b>";
        $qtde_bloqueados++;
    }
    else{
        echo "<u>Cliente não será bloqueado<br></u>";
        $qtde_desbloqueados++;
    }
}
    echo 'Quantidade de clientes que será bloqueado:'.$qtde_bloqueados++;
    echo 'Quantidade de clientes livre:'.$qtde_desbloqueados++;
Bom deu certo ele verifica a data e se o cliente tiver uma compra antiga maior q 4 meses ele mostra a msg, porem.... quando o cliente tem la 3, 5, 10 compras ele tem que pegar a ultima compra do cliente para fazer o calculo certo, e no caso ele não faz isso...Eu até tentei controlar este problema com
GROUP BY P.id_cliente
      ORDER BY P.id_pedido DESC

Para agrupar o id_cliente para o caso do cliente ter 5 compras ser tratado como apenas 1 já que possuem o mesmo id_cliente, e depois ordenar pelo id_pedido que no caso seria o maior, ou seja a data maior que foi feito o pedido, mas não deu certo...apareceram mtos clientes que tiveram compras maiores q 4 meses e com compras no mesmo mes e que foram bloqueados.

alguém pode me ajudar, eu precisava pegar a ultima data do pedido referente aquele cliente?

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Você chamaria a função assim no seu código..

OBS.: Você tem que EDITAR a função pois coloquei ela pra receber o formato brasileiro de datas.

//Você faria a consulta e pegava a dato do pedido.
//Faria o mysql_fetch_array
//ex.: while($dados = mysql_fetch_array)
$meses = meses($dados['datapedido']);

if($meses > 4)
{
echo "Usuario Bloquiado";
}else{
echo "Usuario Liberado";
}
Se você quiser ela com o formato de Banco MySQL seria essa:
<?php
function meses($datape){
         $datap = explode('-',$datape);
         $diap = $datap[2];
         $mesp = $datap[1];
         $anop = $datap[0];

         $data_atual = date('Y-m-d');
         $datah = explode('-',$data_atual);
         $diah = $datah[2];
         $mesh = $datah[1];
         $anoh = $datah[0];
         
         $meses = $mesh - $mesp;
         $dias = $diah - $diap;
         $anos = $anoh - $anop;
         if($anos < 0){
          echo "Pedido ainda sera feito!!";
          exit;
         }
         if($anos > 0){
          $meses = ($anos * 12) + $meses;
         }
         if($diah < $diap){
          $meses--;
         }
         return $meses;
}
?>

Claro que da certo ela deu certo aqui =)

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...