Datas coloridas

Enviada por Leonardo Soares Duque 
Leonardo Soares Duque
Datas coloridas
31 de January de 2018 às 08:46PM
Olá pessoal, esse é meu primeiro trabalho com PHP e estou com certa dificuldade em acertar uma condição.

O resumo é assim, eu possuo uma data no banco de dados:

se ela estiver com data superior a 1 mês a frente, ela deve aparecer normal na tela, com cor azul
se ela estiver com data no intervalo de hoje até 30 dias, ela deve aparecer em negrito na tela e na cor preta
se ela estiver com data inferior a data de hoje, ela deve aparecer normal na tela, com cor vermelha.

fiz uma função no php que ficou dessa forma:



function dataTela($data){

$dataprocessada = explode("-", $data); //[dd][mm][aaaa]
$dataprocessada = array_reverse($dataprocessada ); //[aaaa][mm][dd]
$dataprocessada = implode("/", $dataprocessada ); //aaaa-mm-dd

return $dataprocessada ;
}


function dataColorida($data) {


$data_atual=date('Y-m-d'); // strtotime trabalha com mm-dd-aaaa
$timestamp_dt_atual =strtotime($data_atual);

$timestamp_dt_banco =strtotime($data);
if($timestamp_dt_banco . "+30 days" == $timestamp_dt_atual){
echo '<font color=black><strong>'.dataTela($data).'</strong></font>';//se for igual fica preto negrito
}elseif ($timestamp_dt_banco < $timestamp_dt_atual){
echo '<font color=red><background-color=yellow><strong>'.dataTela($data).'</strong></font>';//se for menor fica vermelho
}else{
echo '<font color=#0000A0>'.dataTela($data).'</font>';//se for maior fica azul
}
}


poderiam me ajudar, sinalizando o que eu estou fazendo de errado ?

Agradeço antecipadamente quem puder dedicar um tempinho a depurar esse caso.
Trambulhao
Re: Datas coloridas
01 de February de 2018 às 07:00PM
Seria isso?

$dateNow = date_create('NOW');
$dateDB = date_create('2018-01-27');
$diff = date_diff($dateNow, $dateDB);

$dias = $diff->format("%R%a");

// + de 30 dias (cor azul)
if ($dias > 30) {
echo '<span style="color:blue;">', $dias, ' dias</span>';
}

// data atual até 30 dias (preto negrito)
if ($dias > 0 and $dias < 30) {
echo '<b style="color:black;">', $dias, ' dias</b>';
}

// data inferior a data atual (cor vermalha)
if ($dias < 0) {
echo '<span style="color:red;">', $dias, ' dias</span>';
}
Trambulhao
Re: Datas coloridas
01 de February de 2018 às 07:52PM
if ($dias > 30) {
echo '<span style="color:blue;">', $dias, ' dias</span>';
}
elseif ($dias > 0 and $dias < 30) {
echo '<b style="color:black;">', $dias, ' dias</b>';
}
elseif ($dias < 0) {
echo '<span style="color:red;">', $dias, ' dias</span>';
}
Leonardo Soares Duque
Re: Datas coloridas
01 de February de 2018 às 08:29PM
Prezado Trambulhão,

Fiz as minhas adaptações, mas sua lógica funcionou perfeitamente.

Veja o código final:

function dataColorida($data) {
$data_de_hoje = date_create("NOW");
$data_do_banco = date_create($data);
$diff = date_diff($data_de_hoje, $data_do_banco);

$dias = $diff->format("%R%a");

// para a diferença de datas maiores de 30 dias, o texto da data ficará azul
if ($dias > 30) {
echo '<span style="color:#0000A0;">'. dataTela($data). '</span>';
}
if ($dias >0 and $dias < 30) {
echo '<span style="color:yellow;">'. dataTela($data). '</span>';
}
if ($dias < 0) {
echo '<span style="color:red">'. dataTela($data). '</span>';
}
}



(Muito obrigado pela ajuda!!!!)
Trambulhao
Re: Datas coloridas
05 de February de 2018 às 08:39PM
Só um reparo.. ao invés de usar 3 ifs (3 blocos independentes), usa um único bloco com elseif. Dessa forma o PHP não perder tempo procurando algo que já possa ter encontrado.

Exemplo.

$n = 2;

if ($n == 1){ esse será verificado }
elseif ($n == 2){ condição verdadeira.. e para aqui }
elseif ($n == 3){ será rejeitado.. não perde tempo aqui }

if ($n == 1){ esse será verificado }
if ($n == 2){ condição verdadeira.. e não para aqui }
if ($n == 3){ esse será verificado sem necessidade }
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.