Foros del Web » Programando para Internet » Javascript »

Ayuda Urgente Javascript

Estas en el tema de Ayuda Urgente Javascript en el foro de Javascript en Foros del Web. Tengo el siguiente codigo javascript @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original //-------Calcular pago----------------// function calcular ( numero , pago ) {     var ...
  #1 (permalink)  
Antiguo 28/01/2010, 23:55
Avatar de mijailrv  
Fecha de Ingreso: noviembre-2009
Ubicación: <head> AQUI </head>
Mensajes: 145
Antigüedad: 14 años, 5 meses
Puntos: 5
Exclamación Ayuda Urgente Javascript

Tengo el siguiente codigo javascript

Código Javascript:
Ver original
  1. //-------Calcular pago----------------//
  2. function calcular( numero, pago ){
  3.     var cifras = numero.substr( numero.length - 2 );
  4.     var fecha = vencimiento(cifras);
  5.     var hoy = new Date();
  6.     var dia = hoy.getDate();
  7.     var esteMes = hoy.getMonth();
  8.     var sgteMes = 0;
  9.     var esteAno = hoy.getFullYear();
  10.     var sgteAno = 0;
  11.     if(dia >= fecha){
  12.         if(esteMes == 11){
  13.             sgteMes = 0;
  14.             sgteAno = esteAno + 1;
  15.         }else{
  16.             sgteMes = esteMes + 1;
  17.             sgteAno = esteAno;
  18.         }
  19.         }else{
  20.         sgteMes = esteMes;
  21.         sgteAno = esteAno;        
  22.     }
  23.     var fechaVenc = new Date();
  24.     fechaVenc.setFullYear(sgteAno);
  25.     fechaVenc.setMonth(sgteMes);
  26.     fechaVenc.setDate(fecha);
  27.     var diasFaltan = 1 + fechaVenc.valueOf() - hoy.valueOf();
  28.     diasFaltan = diasFaltan / (1000 * 60 * 60 * 24);
  29.     if (diasFaltan > 30){
  30.         diasFaltan = 30
  31.     }
  32.     var faltaPagar = pago / 30 * parseInt(diasFaltan);
  33.         document.getElementById('fracc').value = faltaPagar.toFixed(4);
  34.     }

El problema que tengo es que cuando son los dias del 29 al 31 el calculo no funciona, es decir, funciona solo del 1 al 28

a que se debe? los días 29 al 31 no realiza el calculo de manera correcta
  #2 (permalink)  
Antiguo 29/01/2010, 01:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ayuda Urgente Javascript

Voluntad de ayudar, haberla hay la... pero si nos facilitas las cosas igual sera más agradable...

Si nos cuentas que hace la funcion, que valor erroneo te da en los casos que dices, por que es erroneo, de donde salen los parametros (numero, pago), que hace la funcion "vencimiento(cifras)" ... etc.

Quim
  #3 (permalink)  
Antiguo 29/01/2010, 02:40
Avatar de mijailrv  
Fecha de Ingreso: noviembre-2009
Ubicación: <head> AQUI </head>
Mensajes: 145
Antigüedad: 14 años, 5 meses
Puntos: 5
Exclamación Respuesta: Ayuda Urgente Javascript

Aca pongo todo el html para que lo prueben, pongo solo los 20 primeros pero llega hasta 99 (me refiero al los vencimientos) la fecha final es 26

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Documento sin título</title>
  5.  
  6. <script type="text/javascript">
  7. var fechaVenc = vencimientos = new Array();
  8.  vencimientos["00"] = 02;
  9.  vencimientos["01"] = 02;
  10.  vencimientos["02"] = 02;
  11.  vencimientos["03"] = 02;
  12.  vencimientos["04"] = 03;
  13.  vencimientos["05"] = 03;
  14.  vencimientos["06"] = 03;
  15.  vencimientos["07"] = 03;
  16.  vencimientos["08"] = 04;
  17.  vencimientos["09"] = 04;
  18.  vencimientos["10"] = 04;
  19.  vencimientos["11"] = 04;
  20.  vencimientos["12"] = 05;
  21.  vencimientos["13"] = 05;
  22.  vencimientos["14"] = 05;
  23.  vencimientos["15"] = 05;
  24.  vencimientos["16"] = 06;
  25.  vencimientos["17"] = 06;
  26.  vencimientos["18"] = 06;
  27.  vencimientos["19"] = 06;
  28.  vencimientos["20"] = 07;
  29.  
  30. function calcular( numero, pago ){
  31.     var cifras = numero.substr( numero.length - 2 );
  32.     var fecha = vencimiento(cifras);
  33.     var hoy = new Date();
  34.     var dia = hoy.getDate();
  35.     var esteMes = hoy.getMonth();
  36.     var sgteMes = 0;
  37.     var esteAno = hoy.getFullYear();
  38.     var sgteAno = 0;
  39.     if(dia >= fecha){
  40.         if(esteMes == 11){
  41.             sgteMes = 0;
  42.             sgteAno = esteAno + 1;
  43.         }else{
  44.             sgteMes = esteMes + 1;
  45.             sgteAno = esteAno;
  46.         }
  47.         }else{
  48.         sgteMes = esteMes;
  49.         sgteAno = esteAno;        
  50.     }
  51.     var fechaVenc = new Date();
  52.     fechaVenc.setFullYear(sgteAno);
  53.     fechaVenc.setMonth(sgteMes);
  54.     fechaVenc.setDate(fecha);
  55.     var diasFaltan = 1 + fechaVenc.valueOf() - hoy.valueOf();
  56.     diasFaltan = diasFaltan / (1000 * 60 * 60 * 24);
  57.     if (diasFaltan > 30){
  58.         diasFaltan = 30
  59.     }
  60.     var faltaPagar = pago / 30 * parseInt(diasFaltan);
  61.         document.getElementById('fracc').value = faltaPagar.toFixed(4);
  62.     }
  63.    
  64. function vencimiento(cifras){
  65.  return vencimientos[cifras];
  66. }
  67. </head>
  68.  
  69.     <form>  
  70.    <p><input type="text" value="" name="num" ></p>
  71.     <p><input type="text" value="" name="pag" ></p>
  72.     <p><input type="text" value="" name="bolivares" id="fracc" disabled></p>
  73.     <p><input type="button" onClick="calcular(this.form.num.value, this.form.pag.value);" value="Calcular">
  74.     </form>
  75. </body>
  76. </html>

El problema que tengo es el siguiente, coloco lo que debe cancelar un cliente, los cuales solo deben cancelar segun su ultimo numero id cierta cantidad de dinero segun la fecha actual y segun su fecha de cobro que son los vencimientos, lo que ocurre es que cuando pasa del dia 29 al dia 31 no puedo usar esta herramienta ya que me colaca que todos deben pagar lo mismo.

por ejemplo, los que terminan en 00 deben cancelar completo todos los dias 2 de cada mes, pero si estamos en 29 de enero la herramienta lanza que deben cancelar lo mismo que todos (completo), cosa que no debería ser.

En cambio con otras fechas por ejemplo desde el 1 hasta el 28 me dice perfectamente todo.

No se que sucede.

Ojo tengo este condicionante que ya se que afecta,
Código Javascript:
Ver original
  1. if (diasFaltan > 30){
  2.         diasFaltan = 30
  3.     }

pero si no lo coloco me dan 31 dias o mas, que tampoco deberia ser

en si el error es el siguiente, al momento de asignar la fecha, si por ejemplo para los 00 siendo 29 de enero deberian faltar 5 dias, pero la funcion me da mas de 31 dias por eso me da 30 en todos

AYUDA!!!!!!!!!!!!!
  #4 (permalink)  
Antiguo 29/01/2010, 02:51
 
Fecha de Ingreso: diciembre-2007
Ubicación: Barcelona
Mensajes: 289
Antigüedad: 16 años, 4 meses
Puntos: 8
Respuesta: Ayuda Urgente Javascript

Hola,

Que sepas que casi me mareo intetando entender que es lo que estás haciendo o al menos intentándolo... Y aun sigo sin saberlo!!!!!!!!!!

De todos modos, sin tenir ni idea de que quieres hacer, viendo como has montado tu script yo miraría por aquí:

Código Javascript:
Ver original
  1. var cifras = numero.substr( numero.length - 2 );

Y por aquí:

Código Javascript:
Ver original
  1. var diasFaltan = 1 + fechaVenc.valueOf() - hoy.valueOf();
  2. diasFaltan = diasFaltan / (1000 * 60 * 60 * 24);
  3. if (diasFaltan > 30){
  4. diasFaltan = 30;
  5. }
  6. var faltaPagar = pago / 30 * parseInt(diasFaltan);
  7. document.getElementById('fracc').value = faltaPagar.toFixed(4);    }

Insisto en que como no se que quiees hacer no te puedo dar una solución, pero en esas operaciones quizás no has tenido en cuenta algo que hace que tu límite se convierta en 29 en lugar de 31.

Has "depurado" el código? Pon alerts para ver si el valor es el esperado en cada momento. Así se encuentran los errores!

Saludos.
  #5 (permalink)  
Antiguo 29/01/2010, 06:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ayuda Urgente Javascript

Pon un ejemplo de valores a entrar en num, entiendo que en pag va el numero de pagos, pero no se lo que hay que poner en num.

Quim
  #6 (permalink)  
Antiguo 29/01/2010, 08:50
Avatar de mijailrv  
Fecha de Ingreso: noviembre-2009
Ubicación: <head> AQUI </head>
Mensajes: 145
Antigüedad: 14 años, 5 meses
Puntos: 5
Exclamación Respuesta: Ayuda Urgente Javascript

cualquier valor entre 00 y 20 para el código de ejemplo que les he dado, fijense que los vencimientos son distintos, cambien la fecha a alguna distinta de 29 al 31 de cualquier mes, y veran a que me refiero
  #7 (permalink)  
Antiguo 01/02/2010, 02:49
 
Fecha de Ingreso: diciembre-2007
Ubicación: Barcelona
Mensajes: 289
Antigüedad: 16 años, 4 meses
Puntos: 8
Respuesta: Ayuda Urgente Javascript

Hola,

Como dice quimfv, puedes poner un ejemplo del lo que deberíamos introducir y que resultado esperar?

Con el código que has puesto, pon un ejemplo de algo que vaya bien, y algo que vaya mal, explicando que es cada número. Por que me lo he mirado 1000 veces y sigo sin tener ni idea de que hace o quieres que haga...

Saludos.
  #8 (permalink)  
Antiguo 01/02/2010, 08:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ayuda Urgente Javascript

He hecho las siguiente pruevas


14/01/2010::::::::00:::::::::25::::::::15,8333
14/01/2010::::::::05:::::::::25::::::::16,6667
29/01/2010::::::::00:::::::::25::::::::3,3333
29/01/2010::::::::05:::::::::25::::::::4,1667
30/01/2010::::::::00:::::::::25::::::::2,5000
30/01/2010::::::::00:::::::::25::::::::3,3333


No siempre da el mismo resultado... tendras que explicarte mejor.

Piensa que un numero con este resultado 3,3333 es distinto de este 3,3333000000000000000003.

Quim
  #9 (permalink)  
Antiguo 01/02/2010, 08:43
 
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Ayuda Urgente Javascript

si no lo he entendido mal, ya que me lio un poco con tu ejemplo:

creo que el problema está en la comparación de fechas yo lo intentaría de la siguiente forma:
transformar los datos a las siguientes variables
var month=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","A ug","Sep","Oct","Nov","Dec");

var fecha1=month[estemes]+" "+estedia+", "+esteano+" "+hora+":"+minuto+":"+segundo;

//el mes de enero es 0, febrero 1...etc

var fecha2=month[mes2]+" "+dia2+", "+ano2+" "+hora+":"+minuto+":"+segundo;

y los comparamos las fechas

diferencia=Date.parse(fecha1)-Date.parse(fecha2);

obtenemos los días de diferencia
diferenciaday=Math.floor(diferencia/(60*60*1000*24)*1);

no se si te servira esto

Etiquetas: Ninguno
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 19:42.