Foros del Web » Programando para Internet » Javascript »

Suma dependiendo si es día, mes o año

Estas en el tema de Suma dependiendo si es día, mes o año en el foro de Javascript en Foros del Web. Hola a todos!!! tengo este código en html y quiero sumar, teniendo una fecha como base, dependiendo de lo que se elija en el select, ...
  #1 (permalink)  
Antiguo 09/04/2011, 01:12
cym
 
Fecha de Ingreso: marzo-2011
Mensajes: 46
Antigüedad: 13 años, 9 meses
Puntos: 0
Exclamación Suma dependiendo si es día, mes o año

Hola a todos!!! tengo este código en html y quiero sumar, teniendo una fecha como base, dependiendo de lo que se elija en el select, si es día, mes o año. Supongo que se lo hará en javascript.

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.     <p>Fecha de Ingreso del Equipo:
  4.    <input type="text" size="13" id="inputField" class="moy"/>dd-mm-aaaa</p>
  5.     <br/>
  6.     <p>Frecuencia de mantenimiento recomendada:  
  7.     cada: <input type="text" size="5" id="ddd" class="moy" />&nbsp;&nbsp;
  8.         <select onchange="" name="a" style=" width: 85px;">
  9.                 <option value="dias"> Dias </option>
  10.                 <option value="meses"> Meses </option>
  11.                 <option value="anios"> Anios</option>
  12.                 </select></p>
  13.                 <div>
  14.                     <input class="mibot" type="button" id="botit"  value="Calcular"/>
  15.                 </div>
  16.     <br/>
  17.     <p>Fecha Estimada del Proximo mantenimiento:
  18.     <input type="text" size="13" id="inputField2" class="moy" /></p>
  19.     <br/>
  20. </body>
  21. </html>

Por ejemplo en:
Fecha de Ingreso del Equipo en el input id="inputField" ingreso 25-12-2009,
después en: Frecuencia de mantenimiento recomendada en el input id="ddd" ingreso 20 y dependiendo de lo que elijo en el select día, mes o año y al presionar el botón "Calcular" el resultado me tendría que aparecer en el campo Fecha Estimada del Proximo mantenimiento en el input id="inputField2". Por ejemplo si escogiera días me tendría que dar la suma de 14-01-2010, si eligiera mes la suma tendría que dar 25-08-2011 y si eligiera año sería 25-12-2029. Espero ser clara y que me puedan ayudar. Desde ya muchas gracias!!!!
  #2 (permalink)  
Antiguo 09/04/2011, 08:14
 
Fecha de Ingreso: febrero-2005
Mensajes: 198
Antigüedad: 19 años, 10 meses
Puntos: 5
Respuesta: Suma dependiendo si es día, mes o año

Te indico la solucion "casi" hecha. Y digo casi porque en javascript los meses van del cero al once, es decir que cuando creas un objeto Date con el mes cero entiende que es enero, y con el 11 entiende que es diciembre (un verdadero genio el que pensó eso). Lo más divertido de todo es que si crear un objeto date con el mes 12 interpreta que es enero del año siguiente. Haz la prueba. te falta corregir eso porque no calcula bien la fecha si pasa del año. Lo dejo para ti.


Código PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <
html xmlns="http://www.w3.org/1999/xhtml">
    <
script type="text/javascript">
    
    function 
calcular(){
    
        var 
fecha document.getElementById('inputField').value;
        
fecha fecha.split('-');
        
        var 
selFrq document.getElementById('frq').value;        
        var 
dateResult;
        var 
valor parseInt(document.getElementById('ddd').value);
        
        switch (
selFrq){
        
            case 
'dias':
                var 
dia parseInt(fecha[0]) + valor;
                
dateResult = new Date (fecha[2], parseInt(fecha[1]), dia)
            break;
            case 
'meses':
                var 
mes parseInt(fecha[1]) + valor;
                
dateResult = new Date (fecha[2], mesfecha[0])
            break;
            
            case 
'anios':
                var 
anio parseInt(fecha[2]) + valor;
                
dateResult = new Date (anioparseInt(fecha[1]), fecha[0])                
            break;
            
            default:
            
alert('la he cagado bien cagada');
        }
        
        
        var 
fechaResult dateResult.getDate() + '-' dateResult.getUTCMonth() + '-' +dateResult.getUTCFullYear();

        
document.getElementById('inputField2').value fechaResult;
    }
    
    
</script>
    <body>
        <p>Fecha de Ingreso del Equipo:
       <input type="text" size="13" id="inputField" class="moy"/>dd-mm-aaaa</p>
        <br/>
        <p>Frecuencia de mantenimiento recomendada:  
        cada: <input type="text" size="5" id="ddd" class="moy" />&nbsp;&nbsp;
            <select onchange="" name="a" style=" width: 85px;" id="frq">
                    <option value="dias"> Dias </option>
                    <option value="meses"> Meses </option>
                    <option value="anios"> Anios</option>
                    </select></p>
                    <div>
                        <input class="mibot" type="button" id="botit"  value="Calcular" onClick="calcular()"/>
                    </div>
        <br/>
        <p>Fecha Estimada del Proximo mantenimiento:
        <input type="text" size="13" id="inputField2" class="moy" /></p>
        <br/>
    </body>
    </html> 

Última edición por occiso; 09/04/2011 a las 08:22
  #3 (permalink)  
Antiguo 10/04/2011, 12:53
cym
 
Fecha de Ingreso: marzo-2011
Mensajes: 46
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Suma dependiendo si es día, mes o año

Muchísimas gracias Occiso!!!! funciona perfecto!!! ya le voy a pulir ciertas cosas como cuando es en el mes de febrero, que tiene 28 días.
  #4 (permalink)  
Antiguo 10/04/2011, 20:15
cym
 
Fecha de Ingreso: marzo-2011
Mensajes: 46
Antigüedad: 13 años, 9 meses
Puntos: 0
De acuerdo Respuesta: Suma dependiendo si es día, mes o año

Aquí está con las modificaciones el código. Muchísimas gracias de nuevo Occiso!!!!

Código PHP:
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <
html xmlns="http://www.w3.org/1999/xhtml">
    <
script type="text/javascript">

    function 
calcular(){

        var 
fecha document.getElementById('inputField').value;
        
fecha fecha.split('-');

        var 
selFrq document.getElementById('frq').value;
        var 
dateResult;
        var 
valor parseInt(document.getElementById('ddd').value);

        switch (
selFrq){

            case 
'dias':
                var 
dia parseInt(fecha[0]) + valor;
                
dateResult = new Date (fecha[2], (parseInt(fecha[1])-1), dia)
            break;
            case 
'meses':
                var 
mes = (parseInt(fecha[1]) - 1) + valor;
                
dateResult = new Date (fecha[2], mesfecha[0])
            break;

            case 
'anios':
                var 
anio parseInt(fecha[2]) + valor;
                
dateResult = new Date (anio, (parseInt(fecha[1])-1), fecha[0])
            break;

            default:
            
alert('la he cagado bien cagada');
        }


        var 
fechaResult dateResult.getDate() + '-' + (dateResult.getUTCMonth()+1) + '-' +dateResult.getUTCFullYear();

        
document.getElementById('inputField2').value fechaResult;
    }

    
</script>
    <body>
        <p>Fecha de Ingreso del Equipo:
       <input type="text" size="13" id="inputField" class="moy"/>dd-mm-aaaa</p>
        <br/>
        <p>Frecuencia de mantenimiento recomendada:
        cada: <input type="text" size="5" id="ddd" class="moy" />&nbsp;&nbsp;
            <select onchange="" name="a" style=" width: 85px;" id="frq">
                    <option value="dias"> Dias </option>
                    <option value="meses"> Meses </option>
                    <option value="anios"> Anios</option>
                    </select></p>
                    <div>
                        <input class="mibot" type="button" id="botit"  value="Calcular" onClick="calcular()"/>
                    </div>
        <br/>
        <p>Fecha Estimada del Proximo mantenimiento:
        <input type="text" size="13" id="inputField2" class="moy" /></p>
        <br/>
    </body>
    </html> 
  #5 (permalink)  
Antiguo 14/04/2011, 09:53
 
Fecha de Ingreso: febrero-2005
Mensajes: 198
Antigüedad: 19 años, 10 meses
Puntos: 5
Respuesta: Suma dependiendo si es día, mes o año

Ojo con los meses '08' y '09' porque al llevar el cero delante js interpreta que están en base numérica octal.

http://www.w3schools.com/jsref/jsref_parseInt.asp

deberías poner
Código PHP:
(parseInt(fecha[1])-110
  #6 (permalink)  
Antiguo 17/04/2011, 12:38
cym
 
Fecha de Ingreso: marzo-2011
Mensajes: 46
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Suma dependiendo si es día, mes o año

Muchas gracias por el detalle, no me había percatado de eso. Lo tuve que poner así para que me lo tome
Código Javascript:
Ver original
  1. (parseInt((fecha[1] - 1), 10))

Etiquetas: año, dependiendo, suma
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 15:46.