Foros del Web » Programando para Internet » Javascript »

Validad que dos fechas pertenecen a un período

Estas en el tema de Validad que dos fechas pertenecen a un período en el foro de Javascript en Foros del Web. Saludos, he realizado las siguientes funciones en javascript. Validad que dadas unas fechas de inicio y de fin éstas estén comprendidas como mucho entre un ...
  #1 (permalink)  
Antiguo 08/04/2011, 16:42
 
Fecha de Ingreso: febrero-2005
Mensajes: 198
Antigüedad: 19 años, 2 meses
Puntos: 5
Validad que dos fechas pertenecen a un período

Saludos, he realizado las siguientes funciones en javascript. Validad que dadas unas fechas de inicio y de fin éstas estén comprendidas como mucho entre un año natural.

Por defecto he configurado que las dos fechas estén entre el 1 de noviembre de un año y el 31 de octubre del año siguiente. Agradezco opiniones y posibles mejoras para hacerla más general o añadirle funcionalidad.

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<
title>Insert title here</title>
<
script language="JavaScript" src ="idiomas.js"</script>
<script type="text/javascript">

function obtenerEjercicio(pFecha, diaIniPeriodo, mesIniPeriodo){

                var dia  = pFecha.getDate();                
                var mes  = pFecha.getUTCMonth()+1;
                var anio = pFecha.getUTCFullYear();

                //fecha inicio periodo.
                var fecPeriodo =  new Date (anio, mesIniPeriodo, diaIniPeriodo);
                var ejercicio;

                if ( pFecha < fecPeriodo ){
                    ejercicio = anio -1;
                }else{
                    ejercicio= anio;
                }

                return ejercicio;
            }

function estaDentroPeriodo( pFecIni, pFecFin,  pDiaIniPeriodo, pMesIniPeriodo ){

    //por defecto indicamos el 1 de noviembre (javascript empieza a contar los meses desde cero)
    var diaIniPeriodo = pDiaIniPeriodo || 1;
    var mesIniPeriodo = pMesIniPeriodo || 10;

    var ejercicioFecIni = obtenerEjercicio(pFecIni, diaIniPeriodo,mesIniPeriodo);
    var ejercicioFecFin = obtenerEjercicio(pFecFin, diaIniPeriodo,mesIniPeriodo);

    if (ejercicioFecIni == ejercicioFecFin){
        return true;
    }else{
        return false
    }
}
    
function miFuncion() {
    
    //varias pruebas con fechas
    
    //sí esta en el periodo
    var fecini = new Date(2010,10,1);
    var fecfin = new Date(2011,9,31);
    
    //NO esta en el periodo
    //var fecini = new Date(2010,9,1);
    //var fecfin = new Date(2011,9,32);
    
    //No sí esta en el periodo
    //var fecini = new Date(2010,10,1);
    //var fecfin = new Date(2011,9,32);
    
    if ( ! estaDentroPeriodo(fecini, fecfin)){
        document.write('NO esta dentro del periodo');
    }else{
        document.write('Esta dentro del periodo');
    }
    
}



</script>
</head>
<body onLoad="miFuncion()">

</body>
</html> 
  #2 (permalink)  
Antiguo 09/04/2011, 12:51
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Validad que dos fechas pertenecen a un período

buenas,

no entiendo por que tanto rodeo. me refiero a que solo necesitas una funciona que reciba la fecha a comprobar.
Código:
function dateRange(date){
var init = new Date(2011, 10, 1), // fecha de inicio, primero de noviembre del 2011 ;
limit = init.getTime() + 31536e6; // 31536e6 equivale un año en milisegundos ;
return (date >= init && date <= limit)? "esta dentro del periodo": "no esta en el periodo";
}

dateRange(new Date(2011, 11, 25)); // diciembre 25, 2011: en periodo;
dateRange(new Date(2011, 2, 8)); // marzo 8, 2011: fuera de periodo;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 09/04/2011, 15:06
 
Fecha de Ingreso: febrero-2005
Mensajes: 198
Antigüedad: 19 años, 2 meses
Puntos: 5
Respuesta: Validad que dos fechas pertenecen a un período

OK, intentaré explicarlo un poco mejor. En el supuesto formulario hay dos fechas: una de inicio y una de fin. Pueden escoger cualquier tipo de fecha pero se debe validar que esas dos fechas deben estar en el rango de un mismo ejercicio. Un ejercicio va desde el 1 de noviembre de un año hasta el 31 de octubre del año siguiente. La idea de dar tanto rodeo es hacer la función algo más útil dejando elegir la fecha interanual de inicio.

En el ejemplo que has puesto solo tienes en cuenta de que se trate de una fecha. Además no tienes en cuenta el año bisiesto.

Imaginemos el caso:
fecha de inicio: 1 de noviembre del 2011
fecha de fin: 31 de octubre del 2015

Si no tengo en cuenta el año me saldría que el rango de fechas están dentro del mismo del mismo ejercicio, cuando en realidad no es así.


Bueno, he reescrito el código un poco. A ver qué les parece

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<
title>Insert title here</title>
<
script language="JavaScript" src ="idiomas.js"</script>
<script type="text/javascript">

function obtenerEjercicio(pFecha, diaIniPeriodo, mesIniPeriodo){

                var anio = pFecha.getUTCFullYear();

                //fecha inicio periodo.
                var fecPeriodo =  new Date (anio, mesIniPeriodo, diaIniPeriodo);


                return (pFecha < fecPeriodo) ?  anio -1 : anio;

            }

function estaDentroPeriodo( pFecIni, pFecFin,  pDiaIniPeriodo, pMesIniPeriodo ){

    //por defecto indicamos el 1 de noviembre (javascript empieza a contar los meses desde cero)
    var diaIniPeriodo = pDiaIniPeriodo || 1;
    var mesIniPeriodo = pMesIniPeriodo || 10;

    var ejercicioFecIni = obtenerEjercicio(pFecIni, diaIniPeriodo,mesIniPeriodo);
    var ejercicioFecFin = obtenerEjercicio(pFecFin, diaIniPeriodo,mesIniPeriodo);
    
    return (ejercicioFecIni == ejercicioFecFin)
}
    
function miFuncion() {
    
    //varias pruebas con fechas
    
    //sí esta en el periodo
    //var fecini = new Date(2010,10,1);
    //var fecfin = new Date(2011,9,31);
    
    //NO esta en el periodo
    //var fecini = new Date(2010,9,1);
    //var fecfin = new Date(2011,9,32);
    
    //No esta en el periodo
    var fecini = new Date(2010,10,1);
    var fecfin = new Date(2015,9,31);
    
    if ( ! estaDentroPeriodo(fecini, fecfin) ){
        document.write('NO esta dentro del periodo');
    }else{
        document.write('Esta dentro del periodo');
    }
    
}



</script>
</head>
<body onLoad="miFuncion()">

</body>
</html> 

Última edición por occiso; 09/04/2011 a las 15:31
  #4 (permalink)  
Antiguo 10/04/2011, 05:22
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 11 meses
Puntos: 310
Respuesta: Validad que dos fechas pertenecen a un período

En realidad sí tiene en cuenta los años bisiestos porque no está trabajando con días, meses ni años, sino directamente con milisegundos. Me parecen muy bien este tipo de aportes, simplemente es una crítica constructiva para que veas que hay otras maneras, más sencillas, de hacer lo mismo.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: fechas
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 23:09.