Foros del Web » Programando para Internet » PHP »

Fecha a cadena

Estas en el tema de Fecha a cadena en el foro de PHP en Foros del Web. Hola a todos tengo lo siguiente para pasar una fecha a texto Código PHP: <?php $meses  = array( "Enero" , "Febrero" , "Marzo" , "Abril" , ...
  #1 (permalink)  
Antiguo 19/03/2013, 13:59
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Exclamación Fecha a cadena

Hola a todos tengo lo siguiente para pasar una fecha a texto
Código PHP:
<?php

$meses 
= array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
$fecha=" a ".date('d')." de ".$meses[date('m')-1]. " del ".date('Y');

?>
Funciona Bien me arroja
a 19 de Marzo del 2013

pero necesito mostrar la fecha asi Diecinueve días del mes de Marzo de dos mil trece



alguien a hecho algo parecido????
desde ya Gracias
  #2 (permalink)  
Antiguo 19/03/2013, 14:10
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Fecha a cadena

Bueno, acabo de hacer un post donde trato de hacer algo como lo tuyo
http://www.forosdelweb.com/f18/funci...n-php-1042777/

pero la diferencia radical es que no me lo convierte a letras. Investigué bastante y creo que eso no es posible a menos que tú crees una serie de arrays que contengan los numeros del UNO al TREINTA y UNO... del DOS MIL al DOS MIL VEINTE o algo asi.. y despues lo cocatenas.. en mi post lo hice de una manera que te podría servir con unos switch de ejemplo...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #3 (permalink)  
Antiguo 19/03/2013, 17:56
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Fecha a cadena

Cita:
Funciona Bien me arroja
a 19 de Marzo del 2013

pero necesito mostrar la fecha asi Diecinueve días del mes de Marzo de dos mil trece
Dile al profesor que te puso esa tarea que se consiga una novia. Es lo mas inutil que a alguien se le puede ocurrir. Sin embargo tampoco es que sea muy dificil. Lo que pasa es que si tocaria hacer muchos switch case para escribir los números.

Código PHP:
<?php
$numero
=2013;
$millares floor($numero 1000);
$restoMillar=$numero%1000;
$centenas=floor($restoMillar/100);
$restoCentenas=$numero%100;
$decenas=floor($restoCentenas/10);
$restoDecenas=$numero%10;
$unidades=floor($restoDecenas);
$numeroDescompuesto=array("millares"=>$millares,"centenas"=>$centenas,"decenas"=>$decenas,"unidades"=>$unidades);
print_r($numeroDescompuesto);?>
p.s Revisa eso de floor, creo que deberia servir para cualquier número, eso del redondeo en ocasiones podria dar una cifra erronea. Lo probe con round y me genero un error por eso lo deje en floor.

Listo, ahí ya tienes los números disgregados por millares, centenas, decenas y unidades. Lo malo es que solo te funciona hasta el año 9999 . Lo malo es crear todos los condicionales para escribir las letras y todo para tener el mismo año durante 365 dias.

Ya eso si te lo dejo de tarea para que la nota te la saques tu y no yo.
__________________
Blog de humor http://elcuasatar.net63.net/
  #4 (permalink)  
Antiguo 19/03/2013, 19:57
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Fecha a cadena

CUASATAR... si tengo tarea te la puedo pasar para que me la hagas, eso de que mi perro se comio mi flash usb ya no me lo cree el profe, jajajaja... perdons, no me aguante!

Estuve investigando y no existe una funcion propia de PHP que haga eso... se podría generar una función con los arrays que te dije y los vas llamando de acuerdo al numero de dia y demás... toca mucho trabajo.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #5 (permalink)  
Antiguo 19/03/2013, 20:09
Avatar de 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
  #6 (permalink)  
Antiguo 19/03/2013, 20:14
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Fecha a cadena

De poderse, por supuesto que se puede, de hecho, los sistemas de facturación y emisión de cheques requieren convertir números a letras.

De hecho, yo hice algo muy rudimentario para mis facturas, pero está en Excel, crees que te sirva de algo?


Ups, me tardé mucho revisando si aún tengo esa función a la mano!
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: cadena, fecha
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:29.