Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
em que formato tá as datas?
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
}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));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](http://php.net/manual/en/datetime.format.php)
echo '<td bgcolor="#00FF00">' . $dataInicial->format('d/m/Y') . '</td>';Obrigado pelas dicas Gabriel Heming e wessleysanttos
Deu certo !!
Abraços
Amigo, se tu usar o datetime do propio PHP não serve?
Veja um exemplo: