638 votos

Comparar las fechas con JavaScript

Alguien puede sugerir una manera de comparar los valores de dos fechas de mayor que, menor que, y no en el pasado el uso de javascript? Los valores serán provenientes de los cuadros de texto.

633voto

moonshadow Puntos 28302

La Fecha de objeto hace lo que usted desea construir uno para cada fecha, a continuación, sólo se les compara el uso de los operadores habituales.

Le sugiero que utilice los menús desplegables o algunos similares limitada formulario de fecha de entrada en lugar de cuadros de texto, aunque, no sea que te encuentras en la validación de entrada en el infierno.

302voto

some Puntos 18965

La forma más fácil de comparar fechas en javascript es que convertir primero a un objeto Date y, a continuación, compare estas fecha-objetos.

A continuación podrá encontrar un objeto con tres funciones:

  • dates.compare(a,b)

    Devuelve un número:

    • -1 si a < b
    • 0 si a = b
    • 1 si a > b
    • NaN si a o b es un ilegales fecha
  • dates.inRange (d,inicio,fin)

    Devuelve un valor booleano o NaN:

    • verdadero si d es entre el inicio y el final (inclusive)
    • falso si d es antes de comenzar o después de la final.
    • NaN si una o más de las fechas son ilegales.
  • dates.convert

    Utilizado por las otras funciones para convertir su entrada a un objeto date. La entrada puede ser

    • una fecha-objeto : La entrada se devuelve como es.
    • una matriz: Interpretada como el año [year,mes,día). NOTA mes es 0-11.
    • un número : se Interpreta como el número de milisegundos desde el 1 de enero de 1970 (una marca de tiempo)
    • una cadena : diferentes formatos, es compatible, como "AAAA/MM/DD", "MM/DD/AAAA", "31 de enero de 2009", etc.
    • un objeto: se Interpreta como un objeto con el año, mes y fecha de atributos. NOTA mes es 0-11.

.

// Source: http://stackoverflow.com/questions/497790
var dates = {
    convert:function(d) {
        // Converts the date in d to a date-object. The input can be:
        //   a date object: returned without modification
        //  an array      : Interpreted as [year,month,day]. NOTE: month is 0-11.
        //   a number     : Interpreted as number of milliseconds
        //                  since 1 Jan 1970 (a timestamp) 
        //   a string     : Any format supported by the javascript engine, like
        //                  "YYYY/MM/DD", "MM/DD/YYYY", "Jan 31 2009" etc.
        //  an object     : Interpreted as an object with year, month and date
        //                  attributes.  **NOTE** month is 0-11.
        return (
            d.constructor === Date ? d :
            d.constructor === Array ? new Date(d[0],d[1],d[2]) :
            d.constructor === Number ? new Date(d) :
            d.constructor === String ? new Date(d) :
            typeof d === "object" ? new Date(d.year,d.month,d.date) :
            NaN
        );
    },
    compare:function(a,b) {
        // Compare two dates (could be of any type supported by the convert
        // function above) and returns:
        //  -1 : if a < b
        //   0 : if a = b
        //   1 : if a > b
        // NaN : if a or b is an illegal date
        // NOTE: The code inside isFinite does an assignment (=).
        return (
            isFinite(a=this.convert(a).valueOf()) &&
            isFinite(b=this.convert(b).valueOf()) ?
            (a>b)-(a<b) :
            NaN
        );
    },
    inRange:function(d,start,end) {
        // Checks if date in d is between dates in start and end.
        // Returns a boolean or NaN:
        //    true  : if d is between start and end (inclusive)
        //    false : if d is before start or after end
        //    NaN   : if one or more of the dates is illegal.
        // NOTE: The code inside isFinite does an assignment (=).
       return (
            isFinite(d=this.convert(d).valueOf()) &&
            isFinite(start=this.convert(start).valueOf()) &&
            isFinite(end=this.convert(end).valueOf()) ?
            start <= d && d <= end :
            NaN
        );
    }
}

Actualizado el 26 de Februari 2011 con la documentación en el código (el código está inalterada).

160voto

Daniel Lidström Puntos 2970

Compare < y > como de costumbre, pero cualquier cosa que involucre = debe utilizar un + prefijo. Así:

var x = new Date('2013-05-23');
var y = new Date('2013-05-23');

// less than, greater than is fine:
x < y; => false
x > y; => false
x === y; => false, oops!

// anything involving '=' should use the '+' prefix
// it will then compare the dates' millisecond values
+x <= +y;  => true
+x >= +y;  => true
+x === +y; => true

Espero que esto ayude!

50voto

Peter Wilkinson Puntos 2228

Por mucho, el método más fácil es restar una fecha a partir de la otra y comparar el resultado.

var oDateOne = new Date();
var oDateTwo = new Date();

alert(oDateOne - oDateTwo === 0);
alert(oDateOne - oDateTwo < 0);
alert(oDateOne - oDateTwo > 0);

18voto

Jason S Puntos 58434

¿en qué formato?

Si usted construye un Javascript Fecha de objeto, sólo puede restar a obtener un milisegundos de diferencia (edit: o justo comparar ellos) :

js>t1 = new Date()
Thu Jan 29 2009 14:19:28 GMT-0500 (Eastern Standard Time)
js>t2 = new Date()
Thu Jan 29 2009 14:19:31 GMT-0500 (Eastern Standard Time)
js>t2-t1
2672
js>t3 = new Date('2009 Jan 1')
Thu Jan 01 2009 00:00:00 GMT-0500 (Eastern Standard Time)
js>t1-t3
2470768442
js>t1>t3
true

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X