Jump to content
fabio.aurelio

[Resolvido] If para calcular dias

Recommended Posts

Olá pessoal,

Estou gerando um código, em que eu vou mudar a cor de uma informação, de acordo com os dias em atraso.

A parte da mudança dá cor eu já consegui, mas o cálculo dos dias que está difícil..

 

Seria mais ou menos isso:

 

If ($dataFinal-$dataInicial) = 1 {
..Verde
}else {
If ($dataFinal-$dataInicial) = 2 {
..Amarelo
}else {
If ($dataFinal-$dataInicial) > 3 {
..vermelho
}

A data está no formato d/mm/y

Sempre que faço o IF, nunca retorna o número de dias correto

 

Vocês tem alguma dica?

 

Obrigado

Share this post


Link to post
Share on other sites

Amigo, se tu usar o datetime do propio PHP não serve?

Veja um exemplo:

 

$dataInicio = new DateTime('2009-10-11');
$dataFim = new DateTime('2009-10-13');
$diferenca = $dataInicio->diff($dataFim);

if($diferenca == 1){
	//codigo
}else if($diferenca == 2){
	//codigo
}

 

http://php.net/manual/pt_BR/datetime.diff.php

Share this post


Link to post
Share on other sites

No meu exemplo tem um erro xD

O correto seria assim:

$dataInicio = new DateTime('2009-10-11');
$dataFim = new DateTime('2009-10-13');
$intervalo = $dataInicio->diff($dataFim);
$diff = $intervalo->format('%a');
if($diff == 1){
    //Codigo
}else if($diff == 2){
    //Codigo
}

 

  • +1 2

Share this post


Link to post
Share on other sites

 

Então, ocorreu erro quando adaptei seu codigo.

 

Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string
  $dataInicio = new DateTime($dataInicial);
        $dataFim    = new DateTime($dataFinal);
        $intervalo  = $dataInicio->diff($dataFim);
        $diff       = $intervalo->format('%a');
        if ($diff == 1) {
            echo '<td bgcolor="#00FF00">' . $dataInicial . '</td>';
        } else if ($diff == 2) {
            echo '<td bgcolor="#FFFF00">' . $dataInicial . '</td>';
            //Codigo
        } else if ($diff > 2) {
            echo '<td bgcolor="#FF0000">' . $dataInicial . '</td>';
        }

 

 

O formato da data esta assim:

 

 $dataInicial = date(('d/m/Y'),strtotime($r->dataInicial));
 $dataFinal = date(('d/m/Y'),strtotime($r->dataFinal));

 

 

 

 

Share this post


Link to post
Share on other sites

A melhor solução é a apresentada pelo @wessleysanttos. No seu caso, você só precisa corrigir algumas situações.

 

A primeira é sobre a entrada de dados, pois, DateTime espera alguns formatos padrões (o que não é o seu caso).

 

Como sua data está como "d/m/Y", você precisa utilizar o método DateTime::createFromFormat.

DateTime::createFromFormat('d/m/Y' , '04/05/2017');

Saída:

Citar

object(DateTime)#1 (3) { ["date"]=> string(26) "2017-05-04 14:12:29.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "Europe/Amsterdam" }

 

 

Caso não utilizar, o formato será reconhecido como "m/d/Y"

new DateTime('04/05/2017');

Saída:

Citar

object(DateTime)#1 (3) { ["date"]=> string(26) "2017-04-05 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "Europe/Amsterdam" }

 

 

Entretanto, isso não é o que está gerando o erro, e sim os códigos abaixo (esse código se repete 3 vezes):

echo '<td bgcolor="#00FF00">' . $dataInicial . '</td>';

A variável $dataInicial é um objeto, logo, você precisa tratá-lo como tal. Deve utilizar o método DateTime::format

echo '<td bgcolor="#00FF00">' . $dataInicial->format('d/m/Y') . '</td>';

 

  • +1 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By djwagnersp
      Bom dia amigos, tudo bem? estou com uma duvida se alguém puder me ajudar agradeço desde já.
       
      tenha a seguinte condição:
      //array dos produtos $prod = 'agua'; $prod = 'refri'; $prod = 'cerveja'; //array das quantidades $qtd = '3'; $qtd = '2'; $qtd = '6'; Gostaria de fazer um loop o for ou foreach que imprimisse o $prod a quantidade de vezes do $qtd
      como seria possível realizar isso?
    • By dutopfave
      Galera tenho um cadastro de cliente que preenche nome e login, ai quando digita o nome, automaticamente ele preenche o login, pra agiliza, ta assim: $("#inputdonome").blur(function(){ $("#login").val($(this).val()); }); só que to com problema de nome repetido, então vou muda ao invés de preenche automático com nome, preenche com EMAIL, porém tem como preenche automático o login só q para antes de chega no '@'   ai ficaria assim:

      E-mail: contato2019@site.com.br
      Login: contato2019
    • By tiago.rizzon
      Boa tarde pessoal!
      Alguém poderia me dizer oq está errado na minha primeira tentativa de conectar com DB mysql?
      Em anexo coloquei print do erro no browser e print dos dados de acesso ao banco.
      Meu usuário é megasys.com, o nome do DB q quero acessar é CL001... q contem uma tabela teste FUN...
      Desde já agradeço!!
      Obrigado!
       
      meu index.php está assim:
       
      <!DOCTYPE html>
      <html>
      <body>
      <?php
      $link = mysql_connect('mysql22.redehost.com.br,3306', 'megasys.com', 'minhaSenha');
      if (!$link) {
          die('Não foi possível estabelecer uma conexão com o MySQL : ' . mysql_error());
      }
      $db_selected = mysql_select_db('CL001', $link);
      if (!$db_selected) {
          die ('Não foi possivel acessar o banco de dados: ' . mysql_error());
      }
      ?>
      </body>
      </html>


    • By JenneferBarbosa
      <label>Data Inicio</label> <input type="date" name="data_inicio-incluir" id="data_inicio-incluir"> <label>Data Fim</label> <input type="date" name="data_fim-incluir" id="data_fim-incluir"> Boa tarde pessoal, estou iniciando em JS e não sei como fazer a validação de datas. Estou fazendo um sistema de aluguel de livros, então,  como consigo verificar se a data_fim não é menor que a data inicio e que a data_fim seja de 1 até 7 dias depois da data_inicio, não podendo ultrapassar. Se alguém tiver como me ajudar, ficarei muito grata.  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.