| Autor |
Mensaje |
nbr_1

Forista Menor
Registrado: Dom Ene 07, 2007 12:00 am Mensajes: 50 Ubicación: Cuautla, Morelos
|
 Publicado: Dom Sep 18, 2011 9:12 pm |
|
|
Hola que tal, necesito saber como puedo obtener el dia del mes pero en texto. Ejemplo: Si mi fecha es 2011/09/15,. me despliegue: quince de septiembre del dos mil once
La verdad he buscado en san google, pero no he encontrado. Gracias por su valiosa coperacion.
_________________ Cualquiera puede hacer un S.O., la pregunta es ¿Por donde Empiezooo?.
|
|
|
|
 |
maiku

Moderador
Registrado: Mié Abr 18, 2007 11:00 pm Mensajes: 1209 Ubicación: Cojutepeque, El Salvador C. A.
|
 Publicado: Dom Sep 18, 2011 11:32 pm |
|
|
¿qué lenguaje utilizas?
_________________ Grüße...
Maiku
Full linux alchemist!!!
|
|
|
|
 |
ramonovski

Forista Medio
Registrado: Dom Sep 05, 2010 8:30 pm Mensajes: 398
|
 Publicado: Lun Sep 19, 2011 12:02 am |
|
|
Desconozco si hay librerías para convertir eso.
Lo que yo haría sería hacer usos de arrays y de muchos cases.
Para los días crear un arreglo con las palabras del 1 al 31, desde uno a veintinueve (o 31 si se quiere, pero desde el 30 ya se puede empezar a componer).
Luego uno para decenas, desde 30 hasta 90. Otro para centenas.
Para los meses pues uno con los 12 meses.
Y para los años lo dividiría de 2 maneras, primero tomando los 4 dígitos, 2000, 1999 por ejemplo y asignándole mil, o dosmil dependiendo. Y luego tomar los últimos 3 dígitos (si != ^0) y componer con el arreglo de centenas+decenas+unidades. En caso que empieze con 0, pues hacerlo con decenas+unidades.
hmmm la verdad que es un lío, optaría por teclearlo a mano xD!
En idioma inglés creo que sería menos rollo el asunto, bendito español.
¿Es un caso de facturación?
_________________ scrotwm@FreeBSD pekwm@Sabayon ::vim::zsh::urxvtd|blog::dotfiles::last.fm
|
|
|
|
 |
maiku

Moderador
Registrado: Mié Abr 18, 2007 11:00 pm Mensajes: 1209 Ubicación: Cojutepeque, El Salvador C. A.
|
 Publicado: Lun Sep 19, 2011 12:30 am |
|
estoy de acuerdo contigo ramonovski, pero si nbr_1 está utilizando una base de datos, puede aprovechar que la mayoría poseen traducción de fechas (como poner 21/12/2011 que lo podría traducir una BD por viernes 21 de diciembre 2011) lo cual ya es un pequeño ahorro de tiempo. nbr, revisa este link en el apartado date format es para mysql ojala no necesites para C que en ese caso habrá que hacerlo a pie o buscar alguna implementación.
_________________ Grüße...
Maiku
Full linux alchemist!!!
|
|
|
|
 |
t4rr1t0

Ganador CSEL 2011
Registrado: Dom Dic 12, 2010 10:07 am Mensajes: 313
|
 Publicado: Lun Sep 19, 2011 6:21 pm |
|
Si fuese en Perl se podria hacer con arrays o hashes (pares clave=valor) donde el numero fuese la clave y el el valor almacenado fuese la palabra. En este link se explica el uso de hashes en Perl. Ruby y PHP tambien soportan hashes y me imagino que pasa lo mismo con otros lenguajes. Editado: Editado Me parecio interesante el tema y cree un pequeño script para generar la fecha actual en palabras en PERL para mostrar ese dato en mi conky: Código: #!/usr/bin/perl -w use strict;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; my @dias=qw(uno dos tres cuatro cinco seis siete ocho nueve diez once doce trece catorce quince dieciseis diecisiete dieciocho diecinueve veinte veintiuno veintidos veintitres veinticuatro veinticinco veintiseis veintisiete veintiocho veintinueve treinta treinta_y_uno );
my @meses=qw(enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre);
my @diasem=qw(Domingo Lunes Martes Miercoles Jueves Viernes Sabado);
print uc("$diasem[$wday] $dias[$mday-1] de $meses[$mon] del $year \n");
Perdio algo de elegancia en pos de que las partes del codigo quedasen más diferenciadas. Salu2.
|
|
|
|
 |
nbr_1

Forista Menor
Registrado: Dom Ene 07, 2007 12:00 am Mensajes: 50 Ubicación: Cuautla, Morelos
|
 Publicado: Mar Sep 27, 2011 10:33 pm |
|
|
Hola a Todos y gracias por sus comentarios, en realidad es lenguaje PHP, y bueno, gracia sus comentarios, realice lo siguiente para obtener el dia, el mes y el año y lo obtengo de la siguiente manera:
<? $f_d = date("d"); if ($f_d == 01) { $fe_txt = primer; } if ($f_d == 02) { $fe_txt = dos; } if ($f_d == 03) { $fe_txt = tres; } if ($f_d == 04) { $fe_txt = cuatro; } if ($f_d == 05) { $fe_txt = cinco; } if ($f_d == 06) { $fe_txt = seis; } if ($f_d == 07) { $fe_txt = siete; } if ($f_d == 08) { $fe_txt = ocho; } if ($f_d == 09) { $fe_txt = nueve; } if ($f_d == 10) { $fe_txt = diez; } if ($f_d == 11) { $fe_txt = once; } if ($f_d == 12) { $fe_txt = doce; } if ($f_d == 13) { $fe_txt = trece; } if ($f_d == 14) { $fe_txt = catorce; } if ($f_d == 15) { $fe_txt = quince; } if ($f_d == 16) { $fe_txt = dieciséis; } if ($f_d == 17) { $fe_txt = diecisiete; } if ($f_d == 18) { $fe_txt = dieciocho; } if ($f_d == 19) { $fe_txt = diecinueve; } if ($f_d == 20) { $fe_txt = veinte; } if ($f_d == 21) { $fe_txt = veintiun; } if ($f_d == 22) { $fe_txt = veintidós; } if ($f_d == 23) { $fe_txt = veintitrés; } if ($f_d == 24) { $fe_txt = veinticuatro; } if ($f_d == 25) { $fe_txt = veinticinco; } if ($f_d == 26) { $fe_txt = veintiséis; } if ($f_d == 27) { $fe_txt = veintisiete; } if ($f_d == 28) { $fe_txt = veintiocho; } if ($f_d == 29) { $fe_txt = veintinueve; } if ($f_d == 30) { $fe_txt = treinta; } if ($f_d == 31) { $fe_txt = "treinta y un"; }
//echo $fe_txt; ?>
Este codigo, lo guarde en un archivo llamada ndia, y solo comparo el dia con el funcion date('y'); asignadosela a una variable y la comparo, con estos if, para ahorar algo de codigo, lo guardo en un archivo diferente y solo lo mando llamar como libreria con el include('ndia.php') en mi codigo principal. Gracias por todo. Salu2.
_________________ Cualquiera puede hacer un S.O., la pregunta es ¿Por donde Empiezooo?.
|
|
|
|
 |
ramonovski

Forista Medio
Registrado: Dom Sep 05, 2010 8:30 pm Mensajes: 398
|
 Publicado: Mar Sep 27, 2011 11:16 pm |
|
|
Dato:
En la mayoría de los casos un switch-case siempre viene mejor que un montón de ifs anidados, por elegancia y por velocidad de ejecución. Busca por ahí comparaciones, me darán la razón.
_________________ scrotwm@FreeBSD pekwm@Sabayon ::vim::zsh::urxvtd|blog::dotfiles::last.fm
|
|
|
|
 |
mcun

Moderador
Registrado: Dom Abr 18, 2010 4:30 pm Mensajes: 2790 Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
|
 Publicado: Mié Sep 28, 2011 11:57 am |
|
mmmm lo has echo muy complejo, poco elegante y costoso en recursos Código: <?php $f = fopen ("dias.txt", "r"); $ln= 0; $fecha=date("d"); while ($line= fgets ($f)) { $ln++; if($ln==$fecha){ echo '-->' .$ln .'<br />' .$line; } } fclose ($f); ?>
en el archivo dias.txt pones los días en nombres uno por linea Código: uno dos tres cuarto cinco seis siete hocho nueve dies once doce trece catorce quince dis6 dies7 dies8 dies9 veinte venti1 venti2 venti3 venti4 venti5 venti6 venti7 venti8 venti9 treinta trenta1
... por regla general cuando un código es repetitivo y poco elegante, de seguro hay una opción mejor PD: espero haber interpretado correctamente lo que buscas
_________________ ... reinstalar un SO cuando produce un error es como tirar un bebe a la basura cuando se hace caca..
Trusted Network and Developer | Reglamento General de los Foros |WIKI-EL | Twitter @SISIAM Debian| ArchLinux |Linux User #508809
|
|
|
|
 |
ramonovski

Forista Medio
Registrado: Dom Sep 05, 2010 8:30 pm Mensajes: 398
|
 Publicado: Mié Sep 28, 2011 1:41 pm |
|
mcun escribió: en el archivo dias.txt pones los días en nombres uno por linea Código: . . . hocho . . .
Ese sí no te lo perdono xD!
_________________ scrotwm@FreeBSD pekwm@Sabayon ::vim::zsh::urxvtd|blog::dotfiles::last.fm
|
|
|
|
 |
mcun

Moderador
Registrado: Dom Abr 18, 2010 4:30 pm Mensajes: 2790 Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
|
 Publicado: Mié Sep 28, 2011 2:20 pm |
|
|
|
 |
t4rr1t0

Ganador CSEL 2011
Registrado: Dom Dic 12, 2010 10:07 am Mensajes: 313
|
 Publicado: Mié Sep 28, 2011 3:09 pm |
|
Si entiendo bien, para lo que planteas no necesitas ni if ni estructuras similares. Código: $lista_nros="cero|uno|dos|tres|cuatro..."; $nombre_nros=explode("|",$lista_nros);
$f_d = date("d"); echo $nombre_nros[$f_d];
Salu2 Off topic:mcun lo del hocho tambien es por la edad, no? 
|
|
|
|
 |
mcun

Moderador
Registrado: Dom Abr 18, 2010 4:30 pm Mensajes: 2790 Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
|
 Publicado: Mié Sep 28, 2011 3:36 pm |
|
pues así e mas elegante aún Off topic:Citar: mcun lo del hocho tambien es por la edad, no?
Jaaaa eso me pasa por no googlear cuando tengo dudas XD a mi edad no se puede estar en todo
_________________ ... reinstalar un SO cuando produce un error es como tirar un bebe a la basura cuando se hace caca..
Trusted Network and Developer | Reglamento General de los Foros |WIKI-EL | Twitter @SISIAM Debian| ArchLinux |Linux User #508809
|
|
|
|
 |
Juanp_1982

Forista Mayor
Registrado: Sab Ago 12, 2006 11:00 pm Mensajes: 897 Ubicación: Toronto, Canada
|
 Publicado: Mié Sep 28, 2011 4:47 pm |
|
hay funciones en PHP que hacen el trabajo por ti, y son MUY flexibles empieza por configurar el idioma y el lugar con setlocate() y luego con date() [y el formato que tu queiras] esto te va a dar un aproximado en palabras y en espaniol de lo que estas buscando y todo el trabajo que necesitas lo haces en 2 lineas de codigo  para mayor informacion googlea las funciones que te acabo de dar para que lo adaptes a tu pais, idioma y formato que estas buscando 
_________________ La Hora Mas oscura es una antes de que Amanesca (Anonimo)
|
|
|
|
 |
akodo

Moderador
Registrado: Mié Nov 28, 2007 12:00 am Mensajes: 1361 Ubicación: En la X del explorer (pulse para llamar)
|
 Publicado: Vie Sep 30, 2011 3:40 am |
|
Analizando un poco por encima los costes de ejecución... nbr_1 : 2 asignaciones + n comparaciones por ejecuciónmcun : creo que el coste es similar, pero añadiendo el coste adicional de abrir el fichero (eso sí, es más elegante  ) ramonovski : depende de como se ejecute internamente (si sabe o no dónde "saltar"), aunque supongo que será 1 comparación + 2 asignación en el mejor caso, o 2 asignaciones + n comparaciones en el peor. t4rr1t0 : 2 asignaciones + lo que tarde el explode. Mi opción : similar a la que dice t4rr1t0, pero utilizando un array directamente Código: function toDateString($day){ static $days = array("cero", "uno", "dos", ...... ); return $days[$day]; } $day = date("d"); echo toDateString($day);
El coste es en teoría : 1 asignación por script (no por ejecución de la función) para inicializar el array + 1 asignación para obtener el día. La otra opción es la de Juanp_1982
_________________ Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)
|
|
|
|
 |
mcun

Moderador
Registrado: Dom Abr 18, 2010 4:30 pm Mensajes: 2790 Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
|
 Publicado: Vie Sep 30, 2011 7:37 am |
|
Si tienes razón mi código parece ser muy similar al de nbr_1 en cuanto a costo de ejecución, EditoPara no andar especulando hice un Benchmarking con la clase stoper para php y los resultados son los siguientes Código: Empiezo... mcun 30-->treinta el tiempo de script mcun 0.0002 sec
Empiezo... t4rr1t0 treinta el tiempo de script t4rr1t0 0.0001 sec
Empiezo... akodo treinta el tiempo de script akodo 0 sec
Empiezo... nbr_1 treinta el tiempo de script nbr_1 0.0001 sec
Al final el mio resulto serel mas costoso  el de akodo el mas rápido y los demás iguales... al que le interese un ejemplo de uso de la clase stoper
_________________ ... reinstalar un SO cuando produce un error es como tirar un bebe a la basura cuando se hace caca..
Trusted Network and Developer | Reglamento General de los Foros |WIKI-EL | Twitter @SISIAM Debian| ArchLinux |Linux User #508809
|
|
|
|
 |
|
|
|