Foros del Web » Programando para Internet » Javascript »

sumarle un número a otro que antes era string

Estas en el tema de sumarle un número a otro que antes era string en el foro de Javascript en Foros del Web. Hola gente, es muy raro lo que me sucede con este script que voy a pegar a continuación: Esta función recoge una fecha tipo dia/mes/año ...
  #1 (permalink)  
Antiguo 28/05/2010, 04:31
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
sumarle un número a otro que antes era string

Hola gente, es muy raro lo que me sucede con este script que voy a pegar a continuación:

Esta función recoge una fecha tipo dia/mes/año (08/12/2010)
Y debe separar los valores en sendas variables dia , mes y año

El problema es muy raro , el tema funciona perfectamente menos con los dias 08 y 09 de el mes que sea, es como si es dia 08 o 09 lo interpretara como 0 , ya que al sumarle 2 el resultado es 2 , ¿porque no pasa esto con 07, 06 etc etc...?.


Código:
function displayVals() {
	
var singleValues = $("#fecha_ini").val();

 //aquí compruebo que efectivamente llegan los valores correctamente como //08/12/2010
alert(singleValues);

var cadena=singleValues.split('/');
alert('dia: '+cadena[0]); //aquí compruebo que el dia llega como 08 (por ejmp)
mes=parseInt(cadena[1])-1;

 //le sumamos dos al número que pasamos antes a integer     
dia=parseInt(cadena[0])+2;
                 
ano=cadena[2];
//08/03/2010
alert(dia); //y este es el problema 
/* minDate:(año,mes,dia) */ //ACTUALIZAMOS FECHA DE SALIDA, MINIMO DOS DIAS DESPUES
$("#fecha_fin").datepicker("change", {minDate: new Date(ano,mes,dia) });
//$('#fecha_fin').datepicker({ minDate: new Date(ano,mes,dia) });
//alert(mes);alert(dia);alert(ano);

}
Un saludo
__________________
Videotutoriales de Drupal
  #2 (permalink)  
Antiguo 28/05/2010, 04:51
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: sumarle un número a otro que antes era string

Solucionado:
Una cosa curiosa , lo solucioné asi:

Forzando al dia a convertirse en base 10 :
dia=parseInt(cadena[0],10)+2;

Pero sigo dándole vuelta porque solo me fallaba con 08 y 09 no con el resto de 07, 06 etc etc ...

Un saludo
__________________
Videotutoriales de Drupal
  #3 (permalink)  
Antiguo 28/05/2010, 09:27
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 3 meses
Puntos: 45
Respuesta: sumarle un número a otro que antes era string

Buenas,

la explicación a lo que te está pasando es que según la especificación ECMAScript cuando la cadena que se quiere convertir mediante parseInt() comienza por un cero se puede convertir si no se especifica la base, que sería el segundo parámetro, como un número octal, que es lo que te está haciendo. Pero como en los números octales sólo se admiten dígitos del 0 al 7 y parseInt cuando encuentra un caracter no válido termina la conversión, cuando llega al 8 que no es válido en el sistema octal ya no lo incluye en el número y por eso devuelve 0 y lo mismo pasaría con 09 pero también con 018 y 019 y en ese caso devolvería 1 y con 028 y 029 que devolvería 2. Al incluir la base 10 como segundo parámetro como has hecho, se soluciona el problema porque se fuerza a que la conversión se haga a decimal.

Me acabo de dar cuenta de que:

Código Javascript:
Ver original
  1. alert('Es mi mensaje nº : ' + parseInt('1100100', 2));

Última edición por Tecna; 28/05/2010 a las 09:59
  #4 (permalink)  
Antiguo 29/05/2010, 04:08
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: sumarle un número a otro que antes era string

Cita:
Iniciado por Tecna Ver Mensaje
alert('Es mi mensaje nº : ' + parseInt('1100100', 2));
[/HIGHLIGHT]
Gracias, muy buena explicación, y felicidades por tu mensaje 100 !!
__________________
Videotutoriales de Drupal

Etiquetas: string
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 21:45.