Ver Mensaje Individual
  #5 (permalink)  
Antiguo 19/03/2013, 20:09
Avatar de portalmana
portalmana
 
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: Fecha a cadena

Si buscan en internet, existen multiples funciones que te convierten numeros a letras pues resultan utiles para impresión de recibos donde se ponen las cantidades en números y en letras.

Código PHP:
Ver original
  1. <?php
  2. class NroEnLetra {
  3.  
  4. private $letra;
  5. private $convertidos=Array();
  6. private $digitos=Array();
  7. private $lugares;
  8. private $decimal;
  9. private $valor;
  10. private $partedecimal;
  11.     public function __construct($valor,$decimal)
  12.     {
  13.         $this->valor=$valor;
  14.       $this->decimal=$decimal;
  15.       $vale=$valor;
  16.       $partido=explode(".",$vale);
  17.       $numero=$partido[0];
  18.      /* if ($partido[1]==0)
  19.       {
  20.          $this->partedecimal=sprintf("%+02s",$partido[1]);
  21.       }else */$this->partedecimal=/*sprintf("%-02s",*/$partido[1];/*);*/
  22.       if($numero=="")$numero=0;
  23.         $largo=strlen($numero);
  24.         $lugares=ceil($largo/3);
  25.         $this->lugares=$lugares;
  26.         $alreves=strrev($numero);
  27.         for($i=0;$i<$lugares;$i++)
  28.         {
  29.             $dadosvuelta[] =substr($alreves,$i*3,3);
  30.         }
  31.         for($j=0;$j<count($dadosvuelta);$j++)
  32.         {
  33.             $this->digitos[]=strrev($dadosvuelta[$j]);
  34.            
  35.         }
  36.         for ($h=0;$h<count($this->digitos);$h++)
  37.         {
  38.             $this->convertidos[]=$this->convertir($this->digitos[$h]);
  39.             //echo $this->convertir($this->digitos[$h])."<br>";
  40.         }$this->armado($this->convertidos);
  41.            
  42.     }
  43.  
  44.  
  45.     private function convertir($numero)
  46.     {
  47.         $unidades=array("uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve",
  48.                         "diez","once","doce","trece","catorce","quince","dieciseis","diecisiete",
  49.                         "dieciocho","diecinueve","veinte");
  50.         $decenas=array("veinti","treinta","cuarenta","cincuenta","sesenta","setenta","ochenta","noventa");
  51.         $centenas=array("ciento","doscientos","trescientos","cuatrocientos","quinientos","seiscientos",
  52.                     "setecientos","ochocientos","novecientos");
  53.     if ($numero==0||$numero==""){return "cero";}
  54.     elseif ($numero<100)
  55.     {                
  56.       if($numero<=20)
  57.             return $unidades[$numero-1];
  58.         else
  59.         {
  60.         $dec=$numero/10;
  61.         if((int)$dec>2 && $numero%10!=0)$espacio=" y ";
  62.         $unid= $numero%10;
  63.          return $decenas[$dec-2].$espacio.$unidades[$unid-1];  
  64.         $espacio="";    
  65.       }
  66.     }
  67.     else
  68.     {
  69.       $cent=$numero/100;
  70.       if($numero%100>20)
  71.       {
  72.         $dec=($numero%100)/10;
  73.        
  74.         if((int)$dec>2 && ($numero%100)%10)$espacio=" y ";
  75.        
  76.         $unid=($numero%10);
  77.         return $centenas[$cent-1]." ".$decenas[$dec-2].$espacio.$unidades[$unid-1];
  78.         $espacio="";
  79.       }
  80.       else
  81.       {
  82.         $dec=$numero%100;
  83.         $moment=$this->nrosRaros($centenas[$cent-1]." ".$unidades[$dec-1]);
  84.         return $moment;
  85.       }  
  86.          
  87.     }
  88.   }
  89.     public function getLetra()
  90.     {
  91.         if ($this->valor==0)
  92.         return "cero";
  93.         else
  94.         return $this->letra;
  95.     }
  96.     private function nrosRaros($raros)
  97.     {
  98.       if($raros=="ciento ")$raros="cien";
  99.       return $raros;
  100.     }
  101.     private function armado($arreglo)
  102.     {
  103.         $contador=count($arreglo);
  104.         for ($i=$contador;$i>0;$i--)
  105.         {
  106.             $momentaneo[] =$this->posiciones($arreglo[$i-1],$i,$arreglo[$i]);
  107.         }
  108.       for($h=0;$h<$contador;$h++)
  109.       {
  110.          $literal=$literal.$momentaneo[$h]." ";
  111.       }
  112.       if($this->decimal!=0)
  113.       {
  114.          $this->letra=$literal." con ".$this->decimales($this->partedecimal);
  115.       }else{$this->letra=$literal;}
  116.     }
  117.     private function posiciones($literal,$posicion,$anterior)
  118.     {
  119.        
  120.     //echo $posicion."<br>";
  121.     //echo $literal."<br>";
  122.       $nronombre=array("","mil","millon","millones","billon","billones");
  123.       switch ($posicion)
  124.       {
  125.         case 0:
  126.             $devolver=$nronombre[0];
  127.             break;
  128.         case 1:
  129.             if($literal==""||$literal=="cero"){$devolver=$nronombre[0];break;}
  130.             $devolver=$literal." ".$nronombre[0];
  131.             break;
  132.         case 2:
  133.             if($literal==""||$literal=="cero"){$devolver=$nronombre[0];break;}
  134.             $literal=str_replace("uno","un",$literal);
  135.             $devolver=$literal." ".$nronombre[1];
  136.             break;
  137.         case 3:
  138.             if($literal==""||$literal=="cero")
  139.             {
  140.                 if($anterior=="cero"){$devolver=$nronombre[0];break;}
  141.                 else {$devolver=$nronombre[0]." ".$nronombre[3];break;}
  142.             }  
  143.             $literal=str_replace("uno","un",$literal);
  144.             if($literal=="un"){$devolver=$literal." ".$nronombre[2];break;}
  145.             else{
  146.             /*if($anterior=="cero"){$devolver=$literal." ".$nronombre[2];break;}
  147.             else {*/$devolver=$literal." ".$nronombre[3];break;}
  148.           //}
  149.         case 4:
  150.             if($literal==""||$literal=="cero"){$devolver=$nronombre[0];break;}
  151.             $literal=str_replace("uno","un",$literal);
  152.             $devolver=$literal." ".$nronombre[1];  
  153.             break;  
  154.         case 5:
  155.             if($literal==""||$literal=="cero")
  156.             {
  157.                 if($anterior=="cero"){$devolver=$nronombre[0];break;}
  158.                 else {$devolver=$nronombre[0]." ".$nronombre[5];break;}
  159.             }        
  160.             $literal=str_replace("uno","un",$literal);
  161.             if($literal=="un"){$devolver=$literal." ".$nronombre[4];break;}
  162.             else{
  163.             /*if($anterior=="cero"){$devolver=$literal." ".$nronombre[2];break;}
  164.             else {*/$devolver=$literal." ".$nronombre[5];break;}
  165.         case 6:
  166.             if($literal==""||$literal=="cero"){$devolver=$nronombre[0];break;}
  167.             $literal=str_replace("uno","un",$literal);
  168.             $devolver=$literal." ".$nronombre[1];  
  169.       }
  170.       return $devolver;
  171.    }
  172.    private function decimales($decimal)
  173.    {  $redondeado="0.".$decimal;
  174.       $decimo=sprintf("%-02s",$this->redondeo($redondeado,$this->decimal));
  175.       $decimal=$decimo."/".pow(10,$this->decimal);
  176.       return $decimal;
  177.    }
  178.    private function redondeo($valor,$lugares)
  179.    {
  180.       $retorno=round($valor*pow(10,$lugares));
  181.       return $retorno;
  182.    }
  183. }  
  184. ?>


Es una clase que ya tiene mucho tiempo y no fue actualizada pero eso ya lo podran realizar ustedes o sacar la idea.
Uso:
Código PHP:
Ver original
  1. <?php
  2.   include_once("class.nroenletraver2.php");
  3.     $objeto=new NroEnLetra(123,3);
  4.   echo $objeto->getLetra();

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp