Saltar al contenido

Comparar dos fechas con JavaScript

Solución:

El objeto Date hará lo que desee: construya uno para cada fecha, luego compárelos usando el >, <, <= o >=.

los ==, !=, ===, y !== los operadores requieren que use date.getTime() como en

var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();

para ser claro, solo verificar la igualdad directamente con los objetos de fecha no funcionará

var d1 = new Date();
var d2 = new Date(d1);

console.log(d1 == d2);   // prints false (wrong!) 
console.log(d1 === d2);  // prints false (wrong!)
console.log(d1 != d2);   // prints true  (wrong!)
console.log(d1 !== d2);  // prints true  (wrong!)
console.log(d1.getTime() === d2.getTime()); // prints true (correct)

Sin embargo, le sugiero que use menús desplegables o alguna forma restringida similar de entrada de fecha en lugar de cuadros de texto, para que no se encuentre en el infierno de la validación de entrada.

La forma más fácil de comparar fechas en javascript es convertirlo primero en un objeto Date y luego comparar estos objetos date.

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

  • fechas.compare (a, b)

    Devuelve un número:

    • -1 si a
    • 0 si a = b
    • 1 si a> b
    • NaN si aob es una cita ilegal
  • date.inRange (d, inicio, final)

    Devuelve un booleano o NaN:

    • cierto si D está entre el comienzo y fin (inclusivo)
    • falso si D es antes comienzo o después fin.
    • NaN si una o más de las fechas son ilegales.
  • fechas.convertir

    Utilizado por las otras funciones para convertir su entrada en un objeto de fecha. La entrada puede ser

    • a fecha-objeto: la entrada se devuelve como está.
    • un formación: Interpretado como [year,month,day]. NOTA el mes es 0-11.
    • a número : Interpretado como el número de milisegundos desde el 1 de enero de 1970 (una marca de tiempo)
    • a cuerda : Se admiten varios formatos diferentes, como “AAAA / MM / DD”, “MM / DD / AAAA”, “31 de enero de 2009”, etc.
    • un objeto: Interpretado como un objeto con atributos de año, mes y fecha. NOTA el 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
        );
    }
}

Comparar < y > como siempre, pero cualquier cosa que involucre = debería usar un + prefijo. Al igual que:

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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *