Pregunta Compara dos fechas con JavaScript


¿Alguien puede sugerir una forma de comparar los valores de dos fechas mayor que, menor que, y no en el pasado usando JavaScript? Los valores vendrán de cuadros de texto ...


1374
2018-01-29 19:14


origen


Respuestas:


los Objeto de fecha hará lo que quiera, construya uno para cada fecha, luego compárelos usando el >, <, <= o >=.

los ==, !=, ===y !== los operadores requieren que uses 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 claros, simplemente verificar la igualdad directamente con los objetos de datos 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, te sugiero que uses los menús desplegables o alguna forma restringida similar de entrada de fecha en lugar de cuadros de texto, para que no te encuentres en el infierno de validación de entrada.


1563
2018-01-29 19:20



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

A continuación 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 una fecha ilegal
  • dates.inRange (d, inicio, fin)

    Devuelve un valor booleano o NaN:

    • cierto Si re está entre el comienzo y fin (inclusivo)
    • falso Si re 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 a un objeto de fecha. La entrada puede ser

    • un fecha-objeto: la entrada se devuelve tal como está.
    • un formación: Interpretado como [año, mes, día]. NOTA mes es 0-11.
    • un número : Interpretado como número de milisegundos desde el 1 de enero de 1970 (una marca de tiempo)
    • un 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 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
        );
    }
}

374
2018-01-31 00:18



Comparar < y > como de costumbre, pero cualquier cosa que implique = 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

¡Espero que esto ayude!


221
2018-05-23 12:21



Los operadores relacionales <  <=  >  >= se puede usar para comparar fechas de JavaScript:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 2);
d1 <  d2; // true
d1 <= d2; // true
d1 >  d2; // false
d1 >= d2; // false

Sin embargo, los operadores de igualdad ==  !=  ===  !== no se puede usar para comparar (el valor de) las fechas porque:

  • Dos objetos distintos nunca son iguales para comparaciones estrictas o abstractas.
  • Una expresión que compara objetos solo es verdadera si los operandos hacen referencia al mismo objeto.

Puede comparar el valor de las fechas para la igualdad usando cualquiera de estos métodos:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 1);
/*
 * note: d1 == d2 returns false as described above
 */
d1.getTime() == d2.getTime(); // true
d1.valueOf() == d2.valueOf(); // true
Number(d1)   == Number(d2);   // true
+d1          == +d2;          // true

Ambos Date.getTime() y Date.valueOf() devuelva la cantidad de milisegundos desde el 1 de enero de 1970 a las 00:00 UTC. Ambos Number función y unario + operador llamar al valueOf() métodos detrás de escena.


124
2018-01-31 16:04



Con mucho, el método más fácil es restar una fecha 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);

63
2017-11-01 00:48



Comparar solo el día (ignorando el componente de tiempo):

Date.prototype.sameDay = function(d) {
  return this.getFullYear() === d.getFullYear()
    && this.getDate() === d.getDate()
    && this.getMonth() === d.getMonth();
}

Uso:

if(date1.sameDay(date2)) {
    // highlight day on calendar or something else clever
}

30
2017-09-27 15:38



Comparando fechas en JavaScript es bastante fácil ... JavaScript tiene incorporado sistema de comparación para fechas lo que hace que sea tan fácil hacer la comparación ...

Simplemente siga estos pasos para comparar el valor de 2 fechas, por ejemplo, tiene 2 entradas que cada una tiene un valor de Fecha en String y tú para compararlos ...

1. tiene 2 valores de cadena que obtiene de una entrada y desea compararlos, son los siguientes:

var date1 = '01/12/2018';
var date2 = '12/12/2018';

2. Necesitan ser Date Object para comparar como valores de fecha, así que simplemente conviértalos a la fecha, usando new Date(), Simplemente los vuelvo a asignar por simplicidad de explicación, pero puedes hacerlo de todos modos:

date1 = new Date(date1);
date2 = new Date(date2);

3. Ahora simplemente compárelos, usando el >  <  >=  <=

date1 > date2;  //false
date1 < date2;  //true
date1 >= date2; //false
date1 <= date2; //true

compare dates in javascript


28
2017-07-11 09:59



qué formato?

Si construyes un Javascript Objeto de fecha, puedes restarlos para obtener una diferencia de milisegundos (edita: o simplemente compáralos):

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

25
2018-01-29 19:19