fork download
  1. <?php
  2.  
  3. function interpolar_cor($cor0, $cor1, $valor) {
  4. if ($valor <= 0) return $cor0;
  5. if ($valor >= 1) return $cor1;
  6. list($r0, $g0, $b0) = sscanf($cor0, "#%02x%02x%02x");
  7. list($r1, $g1, $b1) = sscanf($cor1, "#%02x%02x%02x");
  8. $rx = (int) ($valor * ($r1 - $r0) + $r0);
  9. $gx = (int) ($valor * ($g1 - $g0) + $g0);
  10. $bx = (int) ($valor * ($b1 - $b0) + $b0);
  11. return "#" . str_pad(dechex($rx * 256 * 256 + $gx * 256 + $bx), 6, "0", STR_PAD_LEFT);
  12. }
  13.  
  14. function interpolar_cor_data($cor0, $data0, $cor1, $data1, $dataX) {
  15. $dias_max = $data1->diff($data0)->days;
  16. if ($dias_max <= 0) $dias_max = 1;
  17. $dias_t = $dataX->diff($data0)->days;
  18. return interpolar_cor($cor0, $cor1, $dias_t / (float) $dias_max);
  19. }
  20.  
  21. $data_teste1 = new DateTime("2018-04-01");
  22. $data_teste2 = new DateTime("2018-04-05");
  23. $data_teste3 = new DateTime("2018-04-10");
  24. $data_teste4 = new DateTime("2018-04-20");
  25. $data_teste5 = new DateTime("2018-04-30");
  26. $data_teste6 = new DateTime("2018-05-04");
  27.  
  28. $data_hoje = new DateTime("2018-05-04");
  29. $data_inicio = new DateTime("2018-04-01");
  30.  
  31. // Entre branco e preto:
  32. $branco = "#ffffff";
  33. $preto = "#000000";
  34. echo interpolar_cor_data($branco, $data_inicio, $preto, $data_hoje, $data_teste1) . "\n";
  35. echo interpolar_cor_data($branco, $data_inicio, $preto, $data_hoje, $data_teste2) . "\n";
  36. echo interpolar_cor_data($branco, $data_inicio, $preto, $data_hoje, $data_teste3) . "\n";
  37. echo interpolar_cor_data($branco, $data_inicio, $preto, $data_hoje, $data_teste4) . "\n";
  38. echo interpolar_cor_data($branco, $data_inicio, $preto, $data_hoje, $data_teste5) . "\n";
  39. echo interpolar_cor_data($branco, $data_inicio, $preto, $data_hoje, $data_teste6) . "\n";
  40.  
  41. // Entre vermelho e verde:
  42. $vermelho = "#ff0000";
  43. $verde = "#00ff00";
  44. echo interpolar_cor_data($vermelho, $data_inicio, $verde, $data_hoje, $data_teste1) . "\n";
  45. echo interpolar_cor_data($vermelho, $data_inicio, $verde, $data_hoje, $data_teste2) . "\n";
  46. echo interpolar_cor_data($vermelho, $data_inicio, $verde, $data_hoje, $data_teste3) . "\n";
  47. echo interpolar_cor_data($vermelho, $data_inicio, $verde, $data_hoje, $data_teste4) . "\n";
  48. echo interpolar_cor_data($vermelho, $data_inicio, $verde, $data_hoje, $data_teste5) . "\n";
  49. echo interpolar_cor_data($vermelho, $data_inicio, $verde, $data_hoje, $data_teste6) . "\n";
  50. ?>
Success #stdin #stdout 0.03s 23884KB
stdin
Standard input is empty
stdout
#ffffff
#e0e0e0
#b9b9b9
#6c6c6c
#1e1e1e
#000000
#ff0000
#e01e00
#b94500
#6c9200
#1ee000
#00ff00