/app/DataExtenso.php

https://gitlab.com/FellowsDevel/delicto · PHP · 162 lines · 132 code · 30 blank · 0 comment · 45 complexity · 22ecdec61e064b22fcafaec4c5bd657a MD5 · raw file

  1. <?php
  2. namespace Delicto;
  3. class DataExtenso
  4. {
  5. public static function dataPorExtenso($data, $inclui_artigo = false)
  6. {
  7. if(!$data){
  8. return '';
  9. }
  10. setlocale(LC_ALL, 'pt_BR', 'pt_BR.utf-8', 'pt_BR.utf-8', 'portuguese');
  11. date_default_timezone_set('America/Recife');
  12. $dia = trim(self::valorPorExtenso(substr($data, 0, 2)));
  13. $mes = utf8_encode(strftime('%B', strtotime(str_replace('/', '-', $data))));
  14. $ano = trim(self::valorPorExtenso(substr($data, 6, 4)));
  15. $diaSingularPlural = "dia";
  16. $inicio = "Ao";
  17. if (substr($data, 0, 2) == 1) {
  18. $dia = 'primeiro';
  19. }
  20. if (substr($data, 0, 2) > 1) {
  21. $diaSingularPlural = "dias";
  22. $inicio = "Aos";
  23. }
  24. $dt = str_replace('/', '.', $data);
  25. $resp = "$dia $diaSingularPlural do mês de $mes do ano de $ano ($dt)";
  26. if($inclui_artigo){
  27. $resp = "$inicio $dia $diaSingularPlural do mês de $mes do ano de $ano ($dt)";
  28. }
  29. return $resp;
  30. }
  31. public static function valorPorExtenso($valor = 0, $maiusculas = false)
  32. {
  33. if(!$valor){
  34. return '';
  35. }
  36. $singular = array("", "", "mil", "milhão", "bilhão", "trilhão", "quatrilhão");
  37. $plural = array("", "", "mil", "milhões", "bilhões", "trilhões", "quatrilhões");
  38. $c = array("", "cem", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos");
  39. $d = array("", "dez", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa");
  40. $d10 = array("dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezesete", "dezoito", "dezenove");
  41. $u = array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove");
  42. $z = 0;
  43. $rt = "";
  44. $valor = number_format($valor, 2, ".", ".");
  45. $inteiro = explode(".", $valor);
  46. for ($i = 0; $i < count($inteiro); $i++) {
  47. for ($ii = strlen($inteiro[$i]); $ii < 3; $ii++) {
  48. $inteiro[$i] = "0" . $inteiro[$i];
  49. }
  50. }
  51. $fim = count($inteiro) - ($inteiro[count($inteiro) - 1] > 0 ? 1 : 2);
  52. for ($i = 0; $i < count($inteiro); $i++) {
  53. $valor = $inteiro[$i];
  54. $rc = (($valor > 100) && ($valor < 200)) ? "cento" : $c[$valor[0]];
  55. $rd = ($valor[1] < 2) ? "" : $d[$valor[1]];
  56. $ru = ($valor > 0) ? (($valor[1] == 1) ? $d10[$valor[2]] : $u[$valor[2]]) : "";
  57. $r = $rc . (($rc && ($rd || $ru)) ? " e " : "") . $rd . (($rd &&
  58. $ru) ? " e " : "") . $ru;
  59. $t = count($inteiro) - 1 - $i;
  60. $r .= $r ? " " . ($valor > 1 ? $plural[$t] : $singular[$t]) : "";
  61. if ($valor == "000") {
  62. $z++;
  63. } elseif ($z > 0) {
  64. $z--;
  65. }
  66. if (($t == 1) && ($z > 0) && ($inteiro[0] > 0)) {
  67. $r .= (($z > 1) ? " de " : "") . $plural[$t];
  68. }
  69. if ($r) {
  70. $rt = $rt . ((($i > 0) && ($i <= $fim) &&
  71. ($inteiro[0] > 0) && ($z < 1)) ? (($i < $fim) ? ", " : " e ") : " ") . $r;
  72. }
  73. }
  74. if (!$maiusculas) {
  75. return ($rt ? $rt : "zero");
  76. } else {
  77. if ($rt) {
  78. $rt = ereg_replace(" E ", " e ", ucwords($rt));
  79. }
  80. return (($rt) ? ($rt) : "Zero");
  81. }
  82. }
  83. public static function valorOrdinal($valor = 0, $maiusculas = false)
  84. {
  85. $singular = array("", "", "milésimo", "milionésimo", "bilionésimo", "trilhonésimo", "quadrilhonésimo");
  86. $plural = array("", "", "milésimos", "milionésimos", "bilionésimos", "trilhonésimos", "quadrilhonésimos");
  87. $c = array("", "centésimo", "ducentésimo", "tricentésimo", "quadringentésimo", "quingentésimo", "sexcentésimo", "septingentésimo", "octingentésimo", "noningentésimo");
  88. $d = array("", "décimo", "vigésimo", "trigésimo", "quadragésimo", "quinquagésimo", "sexagésimo", "septuagésimo", "octogésimo", "nonagésimo");
  89. $d10 = array("décimo", "décimo primeiro", "décimo segundo", "décimo terceiro", "décimo quarto", "décimo quinto", "décimo sexto", "décimo sétimo", "décimo oitavo", "décimo novo");
  90. $u = array("", "primeiro", "segundo", "terceiro", "quarto", "quinto", "sexto", "sétimo", "oitavo", "nono");
  91. $z = 0;
  92. $rt = "";
  93. $valor = number_format($valor, 2, ".", ".");
  94. $inteiro = explode(".", $valor);
  95. for ($i = 0; $i < count($inteiro); $i++) {
  96. for ($ii = strlen($inteiro[$i]); $ii < 3; $ii++) {
  97. $inteiro[$i] = "0" . $inteiro[$i];
  98. }
  99. }
  100. $fim = count($inteiro) - ($inteiro[count($inteiro) - 1] > 0 ? 1 : 2);
  101. for ($i = 0; $i < count($inteiro); $i++) {
  102. $valor = $inteiro[$i];
  103. $rc = (($valor > 100) && ($valor < 200)) ? $c[$valor[0]] : $c[$valor[0]];
  104. $rd = ($valor[1] < 2) ? "" : $d[$valor[1]];
  105. $ru = ($valor > 0) ? (($valor[1] == 1) ? $d10[$valor[2]] : $u[$valor[2]]) : "";
  106. $r = $rc . (($rc && ($rd || $ru)) ? " " : "") . $rd . (($rd && $ru) ? " " : "") . $ru;
  107. $t = count($inteiro) - 1 - $i;
  108. $r .= $r ? " " . ($valor > 1 ? $plural[$t] : $singular[$t]) : "";
  109. if ($valor == "000") {
  110. $z++;
  111. } elseif ($z > 0) {
  112. $z--;
  113. }
  114. if (($t == 1) && ($z > 0) && ($inteiro[0] > 0)) {
  115. $r .= (($z > 1) ? " de " : "") . $plural[$t];
  116. }
  117. if ($r) {
  118. $rt = $rt . ((($i > 0) && ($i <= $fim) &&
  119. ($inteiro[0] > 0) && ($z < 1)) ? (($i < $fim) ? ", " : " e ") : " ") . $r;
  120. }
  121. }
  122. if (!$maiusculas) {
  123. return ($rt ? $rt : "zero");
  124. } else {
  125. if ($rt) {
  126. $rt = ereg_replace(" E ", " e ", ucwords($rt));
  127. }
  128. return (($rt) ? ($rt) : "Zero");
  129. }
  130. }
  131. }
  132. ?>