Foros del Web » Programando para Internet » Javascript »

Comparación de fechas

Estas en el tema de Comparación de fechas en el foro de Javascript en Foros del Web. Saludos compañeros, Tengo que hacer una clasificación de facturas. Si la fecha de factura es menor a una determinada fecha la inserto en una variable ...
  #1 (permalink)  
Antiguo 17/12/2010, 13:23
 
Fecha de Ingreso: febrero-2005
Mensajes: 198
Antigüedad: 19 años, 3 meses
Puntos: 5
Comparación de fechas

Saludos compañeros,

Tengo que hacer una clasificación de facturas. Si la fecha de factura es menor a una determinada fecha la inserto en una variable y si no la inserto en otra. El problema es curioso. Ahora mismo funciona correctamente si indico la fecha con el formato dd/mm/yyyy; pero si le aplico otro formato funciona al revés de como debería.

Ejemplo en el código:
si fecha factura <= 31/11/2010 --> versión antigua
si fecha factura > 31/11/2010 --> versión nueva.

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>

/*Divide la factura en dos tipos: los que se visualizan en la versión antigua y en la nueva.
 *  @param {p_facturas} id facturas separadas por comas (en caso de array su índice debe corresponderse con p_fechaFactura)
 *  @param {p_fechaFactura} fecha en la que se realizan la facturas separadas por comas (formato dd/mm/aaaa)
 *  @return devuelve las facturas separadas en dos partes por los caracteres ##.
 */

function clasificarFacturasSegunFecha(p_facturasp_fechaFactura) {
    
    
//Fecha a partir de la que  empezamos a aplicar la nueva versión de crear facturas.
    
var FECHA_LIMITE = new Date('30/11/2010');
            
    var 
facturaVersionAntigua = new String('');
    var 
facturaVersionNueva   = new String('');
        
    var 
listaFacturas = new String(p_facturas);
    
listaFacturas listaFacturas.split(','); 
    
    var 
listaFechaFactura = new String(p_fechaFactura);
    
listaFechaFactura listaFechaFactura.split(',');
            
    
debugger;
    var 
index;
    for (
index=0indexlistaFacturas.lengthindex++){
        if (new 
Date(listaFechaFactura[index]).getDate() <= FECHA_LIMITE.getDate()){ //solo funciona correctamente con formato dd/mm/yyyy
        //if (Date.parse(listaFechaFactura[index]) <= FECHA_LIMITE){  //no funciona
            
if (!facturaVersionAntigua.length facturaVersionAntigua listaFacturas[index];
            else 
facturaVersionAntigua += ',' listaFacturas[index];                        
        }        
        else {
            if (!
facturaVersionNueva.length
                
facturaVersionNueva listaFacturas[index];
            else 
                
facturaVersionNueva += ',' listaFacturas[index];
        }
                
    }
    return 
facturaVersionNueva +"##"facturaVersionAntigua;
}

</script>
</head>
<body>
<button onclick="clasificarFacturasSegunFecha('11,22', '25/11/2010, 10/12/2010')">formato dd/mm/yyyy</button>
<button onclick="clasificarFacturasSegunFecha('11,22', 'Thu Nov 25 2010 00:00:00 GMT+0100, Fri Dec 10 2010 00:00:00 GMT+0100')">otro formato</button>
</body>
</html> 
Supongo que se trata de algún problema de conversión, pero no logro averiguarlo.
  #2 (permalink)  
Antiguo 17/12/2010, 19:50
 
Fecha de Ingreso: octubre-2010
Mensajes: 83
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Comparación de fechas

No se en que navegador te funciona esto
Código:
new Date('30/11/2010')
es incorrecto o no es valido, dependiendo del navegador.

La manera correcta de crear un nuevo objeto Date (para tu caso) es
Código:
new Date(2010, 10, 30)
Donde el primer parametro es el a#o, el segundo es el numero de mes pero en base a 0 (es decir se empieza a contar desde 0, por ejemplo enero es el mes 0), y el ultimo, es el dia.

Unas sugerencias, no es necesario que uses new String, basta con que uses ''.
  #3 (permalink)  
Antiguo 18/12/2010, 05:03
 
Fecha de Ingreso: febrero-2005
Mensajes: 198
Antigüedad: 19 años, 3 meses
Puntos: 5
Respuesta: Comparación de fechas

Cita:
Iniciado por snahor_ Ver Mensaje
No se en que navegador te funciona esto
Código:
new Date('30/11/2010')
es incorrecto o no es valido, dependiendo del navegador.

La manera correcta de crear un nuevo objeto Date (para tu caso) es
Código:
new Date(2010, 10, 30)
Donde el primer parametro es el a#o, el segundo es el numero de mes pero en base a 0 (es decir se empieza a contar desde 0, por ejemplo enero es el mes 0), y el ultimo, es el dia.

Unas sugerencias, no es necesario que uses new String, basta con que uses ''.

Bueno, si miras en la web de sun de referencia sobre el objeto Date verás

Cita:
new Date(dateString)

dateString: String value representing a date. The string should be in a format recognized by the Date.parse method. (en donde se incluye el dd/mm/yyyy)
De todas maneras lo que me has dicho ya lo había probado y tampoco funciona; es fácilmente comprobable.

Para testear utilizo firefox y firebug.


EDITO: He estado haciendo pruebas y en parte tenías razón. Estabas en lo correcto porque la forma correcta de llamar al constructor es como me has dicho:
Código:
new Date(2010, 10, 30)
El error es que la fecha generada no es la del 30 de Nov de 2010, sino la del 30 de Dec de 2010; es decir, que los meses empieza a contar desde [0-11] siendo el cero el mes de enero y el once el mes de diciembre, por eso me seguía funcionando de una manera inesperada. si le indicas la fecha como:
Código:
new Date(2010, 12, 30)
Te la indica como 30 de enero del 2011. Me parece una buena cagada por parte de los que desarrollaron ese contructor, es anti-intuitivo total.

Tengo la posibilidad de utilizar los formatos de conversion del Extjs. no sé si merece la pena utilizarlos o hay una solución en javascript que sea más elegante. Seguro que no soy el primero que me topo con este dilema.

Última edición por occiso; 18/12/2010 a las 06:09
  #4 (permalink)  
Antiguo 18/12/2010, 10:48
 
Fecha de Ingreso: febrero-2005
Mensajes: 198
Antigüedad: 19 años, 3 meses
Puntos: 5
Respuesta: Comparación de fechas

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 type="text/javascript">

/*Divide la factura en dos tipos: los que se visualizan en la versión antigua y en la nueva.
 *  @param {p_facturas} id facturas separadas por comas (en caso de array su índice debe corresponderse con p_fechaFactura)
 *  @param {p_fechaFactura} fecha en la que se realizan la facturas separadas por comas (formato dd/mm/aaaa)
 *  @return devuelve las facturas separadas en dos partes por los caracteres ##.
 */

function clasificarFacturasSegunFecha(p_facturasp_fechaFactura) {
    
    
//Fecha a partir de la que  empezamos a aplicar la nueva versión de crear facturas.
    
var FECHA_LIMITE = new Date(2010,10,30);

    var 
facturaVersionAntigua = new String('');
    var 
facturaVersionNueva   = new String('');
        
    var 
listaFacturas = new String(p_facturas);
    
listaFacturas listaFacturas.split(','); 
    
    var 
listaFechaFactura = new String(p_fechaFactura);
    
listaFechaFactura listaFechaFactura.split(',');

    
debugger;
    var 
index;
    for (
index=0indexlistaFacturas.lengthindex++){
        if (new 
Date(listaFechaFactura[index]).getTime() <= FECHA_LIMITE.getTime()){
            if (!
facturaVersionAntigua.length facturaVersionAntigua listaFacturas[index];
            else 
facturaVersionAntigua += ',' listaFacturas[index];
        }        
        else {
            if (!
facturaVersionNueva.length
                
facturaVersionNueva listaFacturas[index];
            else 
                
facturaVersionNueva += ',' listaFacturas[index];
        }
                
    }
    return 
facturaVersionNueva +"##"facturaVersionAntigua;
}

</script>
</head>
<body>
<button onclick="clasificarFacturasSegunFecha('11,22', '25/11/2010, 10/12/2010')">formato dd/mm/aaaa</button>
<button onclick="clasificarFacturasSegunFecha('11,22', 'Thu Nov 25 2010 00:00:00 GMT+0100, Fri Dec 10 2010 00:00:00 GMT+0100')">otro formato</button>
</body>
</html> 

Bueno, ahora mismo funciona bien utilizando la opción "otro formato", pero no cuando la fecha de formato es dd/mm/yyyy. Me gustaría que independientemente del formato en el que le llegan las fechas en el parámetro p_fechaFactura realizara bien la comparación. ¿Alguna idea?

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 02:10.